Qualcuno ha detto in questo thread di discussione che non puoi creare una stringa dal nulla.
(che è una bella frase come penso). Ma sì, puoi :-), come mostra il seguente esempio:
var x = null + (string)null;
var wtf = x.ToString();
funziona bene e non genera alcuna eccezione. L'unica differenza è che devi lanciare uno dei null in una stringa - se rimuovi la (stringa) cast , l'esempio viene comunque compilato, ma viene generata un'eccezione di runtime: "Operatore '+' è ambiguo su operandi di digitare '<null>' e '<null>' ".
NB Nell'esempio di codice sopra riportato, il valore di x non è nullo come ci si potrebbe aspettare, in realtà è una stringa vuota dopo aver eseguito il cast di uno degli operandi in una stringa.
Un altro fatto interessante è che in C # / .NET il modo in cui nullviene trattato non è sempre lo stesso se si considerano tipi di dati diversi. Per esempio:
int? x = 1; // string x = "1";
x = x + null + null;
Console.WriteLine((x==null) ? "<null>" : x.ToString());
Per quanto riguarda la prima riga dello snippet di codice: se si xtratta di una variabile intera nullable (ovvero int?) che contiene valore 1, si ottiene il risultato<null> . Se è una stringa (come mostrato nel commento) con valore "1", allora stai "1"tornando piuttosto che<null> .
NB Interessante anche: se si utilizza var x = 1;per la prima riga, viene visualizzato un errore di runtime. Perché? Perché l'assegnazione trasformerà la variabile xnel tipo di dati int, che non è nullable. Il compilatore non assume int?qui, e quindi fallisce nella seconda riga dove nullviene aggiunto.
null.ToString()venga dato il nomewtf. Perché ti sorprende? Non puoi chiamare un metodo di istanza quando non hai nulla da cui chiamarlo in primo luogo.