Я столкнулся с этим сегодня и понятия не имею, почему компилятор C # не выдает ошибку.
Int32 x = 1;
if (x == null)
{
Console.WriteLine("What the?");
}
Я не понимаю, как x может быть нулевым. Тем более, что это назначение определенно вызывает ошибку компилятора:
Int32 x = null;
Возможно ли, что x может стать нулевым, Microsoft просто решила не помещать эту проверку в компилятор или она была полностью пропущена?
Обновление: после того, как я возился с кодом для написания этой статьи, компилятор неожиданно выдал предупреждение о том, что выражение никогда не будет истинным. Теперь я действительно потерялся. Я поместил объект в класс, и теперь предупреждение исчезло, но остался вопрос, может ли тип значения оказаться нулевым.
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)
. Анализ пути кода - не задача компилятора; для этого нужны инструменты статического анализа и модульные тесты.