Mi sono imbattuto in questo oggi e non ho idea del motivo per cui il compilatore C # non genera un errore.
Int32 x = 1;
if (x == null)
{
Console.WriteLine("What the?");
}
Sono confuso su come x potrebbe mai essere nullo. Soprattutto perché questa assegnazione genera sicuramente un errore del compilatore:
Int32 x = null;
È possibile che x possa diventare nullo, Microsoft ha appena deciso di non inserire questo controllo nel compilatore o è stato perso completamente?
Aggiornamento: dopo aver manipolato il codice per scrivere questo articolo, improvvisamente il compilatore ha avvertito che l'espressione non sarebbe mai stata vera. Adesso sono davvero perso. Ho inserito l'oggetto in una classe e ora l'avvertimento è sparito ma è rimasto con la domanda, un tipo di valore può finire per essere nullo.
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). Non è compito del compilatore eseguire l'analisi del percorso del codice; ecco a cosa servono gli strumenti di analisi statica e gli unit test.