Jemand sagte in diesem Diskussionsthread, dass man aus nichts einen String machen kann.
(Das ist ein schöner Satz, wie ich denke). Aber ja - Sie können :-), wie das folgende Beispiel zeigt:
var x = null + (string)null;
var wtf = x.ToString();
funktioniert gut und löst überhaupt keine Ausnahme aus. Der einzige Unterschied besteht darin, dass Sie eine der Nullen in eine Zeichenfolge umwandeln müssen. Wenn Sie die Umwandlung (Zeichenfolge) entfernen , wird das Beispiel weiterhin kompiliert, es wird jedoch eine Laufzeitausnahme ausgelöst : "Operator '+' ist für Operanden von nicht eindeutig Geben Sie '<null>' und '<null>' "ein.
Hinweis: Im obigen Codebeispiel ist der Wert von x nicht wie erwartet null, sondern eine leere Zeichenfolge, nachdem Sie einen der Operanden in eine Zeichenfolge umgewandelt haben.
Eine weitere interessante Tatsache ist, dass in C # / .NET die nullBehandlung nicht immer gleich ist, wenn Sie unterschiedliche Datentypen betrachten. Beispielsweise:
int? x = 1; // string x = "1";
x = x + null + null;
Console.WriteLine((x==null) ? "<null>" : x.ToString());
Betrachten Sie die erste Zeile des Code-Snippets: Wennx es sich um eine nullbare Ganzzahlvariable (dh int?) handelt, die einen Wert enthält 1, erhalten Sie das Ergebnis <null>zurück. Wenn es sich um eine Zeichenfolge (wie im Kommentar gezeigt) mit Wert handelt "1", erhalten Sie "1"eher zurück als <null>.
NB Auch interessant: Wenn Sie var x = 1;für die erste Zeile verwenden, wird ein Laufzeitfehler angezeigt. Warum? Weil die Zuweisung die Variable xin den Datentyp verwandelt int, der nicht nullwertfähig ist. Der Compiler geht hier nicht davon int?aus und schlägt daher in der 2. Zeile wo fehlnull hinzugefügt wird.
null.ToString()der Name gegeben wirdwtf. Warum überrascht dich das? Sie können eine Instanzmethode nicht aufrufen, wenn Sie überhaupt nichts zum Aufrufen haben.