Quelqu'un a dit dans ce fil de discussion que vous ne pouvez pas créer de chaîne avec rien.
(qui est une belle phrase comme je pense). Mais oui - vous pouvez :-), comme le montre l'exemple suivant:
var x = null + (string)null;
var wtf = x.ToString();
fonctionne bien et ne lève pas du tout d'exception. La seule différence est que vous devez convertir l'une des valeurs nulles en une chaîne - si vous supprimez la conversion (chaîne) , l'exemple se compile toujours, mais lève une exception d'exécution: "L'opérateur '+' est ambigu sur les opérandes de tapez '<null>' et '<null>' ".
NB Dans l'exemple de code ci-dessus, la valeur de x n'est pas nulle comme on pourrait s'y attendre, c'est en fait une chaîne vide après avoir transtypé l'un des opérandes en une chaîne.
Un autre fait intéressant est qu'en C # / .NET, la manière dont nullest traitée n'est pas toujours la même si vous considérez différents types de données. Par exemple:
int? x = 1; // string x = "1";
x = x + null + null;
Console.WriteLine((x==null) ? "<null>" : x.ToString());
Regardez la 1ère ligne de l'extrait de code: si xest une variable entière Nullable (c'est-à-dire int?) contenant une valeur 1, alors vous récupérez le résultat <null>. S'il s'agit d'une chaîne (comme indiqué dans le commentaire) avec une valeur "1", vous récupérez "1"plutôt que <null>.
NB Aussi intéressant: si vous utilisez var x = 1;pour la première ligne, vous obtenez une erreur d'exécution. Pourquoi? Parce que l'affectation transformera la variable xen type de données int, qui n'est pas nullable. Le compilateur ne suppose pas int?ici, et échoue donc dans la 2ème ligne où nullest ajouté.
null.ToString()donne ce nomwtf. Pourquoi cela vous surprend-il? Vous ne pouvez pas appeler une méthode d'instance lorsque vous n'avez rien à partir duquel l'appeler en premier lieu.