Il y a un énorme débat sur cette bizarrerie lorsque la fonction a été conçu à l'origine du dos en C# 2.0. Le problème est que C# les utilisateurs sont entièrement utilisés à ce que cela soit significatif:
if(someReference == null)
Lors de l'extension de l'égalité de nullable types de valeur, vous avez les choix suivants.
1) Nullable l'égalité est vraiment levé. Si l'un ou les deux opérandes est null, le résultat n'est ni vrai, ni faux, mais la valeur null. Dans ce cas, vous pouvez soit:
1a) Rendent illégal le fait d'avoir un nullable type de la valeur de l'égalité dans une instruction "if", parce que l'instruction "if" a besoin d'un bool, non nullable bool. Au lieu de cela, tout le monde à utiliser "HasValue" s'ils veulent comparer à la valeur null. C'est verbeux et irritant.
1b) de convertir Automatiquement null false. L'inconvénient de cette est que "x==null" renvoie la valeur faux si x est nulle, ce qui est source de confusion et fonctionne à l'encontre de la compréhension des gens de nulle comparaisons avec les types de référence.
2) Nullable l'égalité n'est pas levé. Nullable l'égalité est vraie ou fausse, et la comparaison à la valeur null est une valeur null vérifier. Cela rend nullable l'égalité incompatible avec les valeurs null de l'inégalité.
Aucun de ces choix n'est évidemment correct; ils ont tous des avantages et des inconvénients. VBScript choisit 1b, par exemple. Après beaucoup de débats en C# à l'équipe de conception a choisi #2.