Я зіткнувся з цим сьогодні і не маю уявлення, чому компілятор 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)
. Не робота компілятора виконувати аналіз шляху коду; для цього і потрібні засоби статичного аналізу та модульні тести.