Da ein "Null" -Wert vorhanden sein muss, muss der Typ nullfähig sein. Dies funktioniert für Referenztypen in Ordnung (jede Klasse, die Sie definieren und die Standard-Bibliothek), und wenn Sie schauen Sie werden sehen, dass die Menschen tun Verwendung null, wenn sie ein Referenzobjekt ohne Wert haben
Employee employee = Employees.Find("John Smith");
if(employee == null) throw new Exception("Employee not found");
Die Frage kommt, wenn Sie den Wert Typen wie Int, Char oder Float verwenden. Im Gegensatz zu Referenztypen, die auf einen Datenblock irgendwo anders im Speicher zeigen, werden diese Werte inline gespeichert und manipuliert (es gibt keinen Zeiger/Verweis).
Aus diesem Grund haben die Werttypen standardmäßig keinen Nullwert. In dem von Ihnen angegebenen Code ist es unmöglich für ParentID null zu sein (Ich bin überrascht, dass dies sogar von Ihrem Compiler - Visual Studio 2008 und wahrscheinlich 2005 wird eine grüne Unterstreichung ziehen und Ihnen sagen, dass die Aussage immer falsch ist) .
Damit ein int einen Nullwert zu haben, müssen Sie es erklären, wie NULL festlegbare
int? parentID;
Jetzt parentID einen Nullwert enthalten kann, weil sie jetzt ein Zeiger (gut ist " Referenz ") zu einer 32-Bit-Ganzzahl statt nur einer 32-Bit-Ganzzahl.
Also hoffentlich verstehen Sie, warum "magische Werte" oft verwendet werden, um null mit den grundlegenden Typen (Werttypen) darzustellen. Es ist einfach eine Menge Ärger und oft ein großer Leistungseinbruch (Nachschlagen was Boxen/Unboxing ist), diese Werttypen als Referenz auf den Wert zu speichern, damit sie null sein können.
Edit: Für weitere Referenz über Boxen/Unboxing (was Sie einen int == null haben müssen), den Artikel zu einem MSDN:
Boxen und Unboxing (C# -Programmierhandbuch)
Leistung
In Bezug auf einfache Zuordnungen sind Boxen und Unboxing rechenintensive Prozesse. Wenn ein Werttyp eingerahmt ist, muss ein neues Objekt zugewiesen und aufgebaut werden. In geringerem Maße ist die zum Unboxing erforderliche Besetzung auch rechnerisch aufwändig. Weitere Informationen finden Sie unter Leistung.
Sie würden viel besser tun, wenn Sie mindestens ein Beispiel zeigten. – GEOCHET
-1: kein Code. -1: kein Problem. Was ist das Problem? Was funktioniert nicht? –
Sie haben die Prüfung rückgängig gemacht (sollte parentID sein! = Null), aber ich denke, die Frage ist gültig. +1 – erikkallen