Jons Antwort ist richtig, aber ich würde einige zusätzliche Notizen hinzufügen.
Warum gibt Console.WriteLine(null)es einen Kompilierungsfehler?
Es gibt 19 Überladungen von Console.WriteLineund drei davon sind auf a anwendbar null: die, die a nimmt string, die, die a nimmt char[]und die, die a nimmt object. C # kann nicht bestimmen, welche dieser drei Sie meinen, daher gibt es einen Fehler. Console.WriteLine((object)null)wäre legal, denn jetzt ist es klar.
Warum schreibt Console.WriteLine(a)man eine leere Zeile?
aist eine Null int?. Die Überlastungsauflösung wählt die objectVersion der Methode aus, sodass die int?Box auf eine Nullreferenz gesetzt wird. Das ist also im Grunde dasselbe wie das Console.WriteLine((object)null), was eine leere Zeile schreibt.
Warum gibt es nicht NullReferenceExceptionauf dem Inkrement?
Wo ist die Null - Referenz , dass Sie besorgt sind? aist eine Null, int?die zunächst kein Referenztyp ist! Denken Sie daran, Nullable - Wertetypen sind Werttypen , nicht Referenztypen , also nicht erwarten , dass sie Referenzsemantik haben , wenn sie auf einen Referenztyp sind eingerahmt. Es gibt kein Boxen im Zusatz.
++,+=und+haben Varianten angehoben. Daher sind die Aussagena++;,a += 1;unda = a + 1;sind alle erlaubt. Jedes Produktnull(keine Ausnahme ausgelöst)aist anfangsnull.