Me encontré con esto hoy y no tengo idea de por qué el compilador de C # no arroja un error.
Int32 x = 1;
if (x == null)
{
Console.WriteLine("What the?");
}
Estoy confundido en cuanto a cómo x podría ser nulo. Especialmente porque esta asignación definitivamente arroja un error del compilador:
Int32 x = null;
¿Es posible que x se vuelva nulo? ¿Microsoft simplemente decidió no poner esta comprobación en el compilador o se perdió por completo?
Actualización: después de jugar con el código para escribir este artículo, de repente el compilador apareció con una advertencia de que la expresión nunca sería verdadera. Ahora estoy realmente perdido. Puse el objeto en una clase y ahora la advertencia desapareció, pero quedó con la pregunta, ¿un tipo de valor puede terminar siendo nulo?
public class Test
{
public DateTime ADate = DateTime.Now;
public Test ()
{
Test test = new Test();
if (test.ADate == null)
{
Console.WriteLine("What the?");
}
}
}
if (1 == 2)
. No es trabajo del compilador realizar análisis de ruta de código; para eso están las herramientas de análisis estático y las pruebas unitarias.int
, el compilador genera advertencias agradables. Para los tipos simples, el==
operador está definido por la especificación del lenguaje C #. Para otras estructuras (no de tipo simple), el compilador se olvida de emitir una advertencia. Consulte Advertencia del compilador incorrecto al comparar la estructura con un valor nulo para obtener más detalles. Para estructuras que no son tipos simples, el==
operador debe estar sobrecargado por unopeartor ==
método que sea miembro de la estructura (de lo contrario, no==
se permite).