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 null
Behandlung 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 x
in 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.