J'ai rencontré cela aujourd'hui et je n'ai aucune idée de la raison pour laquelle le compilateur C # ne lève pas d'erreur.
Int32 x = 1;
if (x == null)
{
Console.WriteLine("What the?");
}
Je ne sais pas comment x pourrait être nul. D'autant plus que cette affectation lève définitivement une erreur de compilation:
Int32 x = null;
Est-il possible que x devienne nul, Microsoft a-t-il simplement décidé de ne pas mettre cette vérification dans le compilateur ou a-t-elle été complètement manquée?
Mise à jour: Après avoir manipulé le code pour écrire cet article, le compilateur a soudainement lancé un avertissement indiquant que l'expression ne serait jamais vraie. Maintenant je suis vraiment perdu. J'ai mis l'objet dans une classe et maintenant l'avertissement a disparu mais reste avec la question, un type de valeur peut-il finir par être nul.
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)
. Ce n'est pas le travail du compilateur d'effectuer une analyse de chemin de code; c'est à cela que servent les outils d'analyse statique et les tests unitaires.