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 null
viene 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 x
tratta 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 x
nel tipo di dati int
, che non è nullable. Il compilatore non assume int?
qui, e quindi fallisce nella seconda riga dove null
viene 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.