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 null
est 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 x
est 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 x
en 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ù null
est 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.