ich hätte eine Nullreferenceexception
Es gibt keine Null Referenz erwartet dereferenziert wird, so „Nullreferenceexception“ sollte nicht zu erwarten. Die Nullable DateTime ist keine Nullnummer . Es ist ein Nullwert.
Da ndate jedoch null ist, wie ist der Eigenschaftsaufruf erfolgreich, da kein Objekt zum Aufrufen der Eigenschaft HasValue vorhanden ist?
Die Frage setzt eine falsche Prämisse voraus. Es gibt ein Objekt. Es gibt eine Nullable DateTime, die den Nullwert einer Nullable DateTime darstellt. Dieser Wert ist ein Objekt.
Betrachten Sie Ihren Code:
DateTime? ndate = null;
Console.WriteLine(ndate.HasValue);
Dies ist nur ein kurzer Weg, etwas zu schreiben, das logisch wie ist:
DateTime ndate = default(DateTime);
bool ndateHasValue = false;
Console.WriteLine(ndateHasValue);
Ein Nullable-Wertetyp ist einfach eine angenehme Art und Weise zu Code zu schreiben, das Mittel msgstr "Bitte fügen Sie diesem Ding einen Booleschen Wert bei, der verfolgt, ob es logisch null ist oder nicht".
+1 beste Erklärung. – JonH
Ich nehme dann an, dass (ndate == null) funktioniert über einen überladenen Operator? – Nathan
@Nathan wahr 15 Zeichen – JonH