Alguien dijo en este hilo de discusión que no se puede hacer una cadena de la nada.
(que es una bonita frase como creo). Pero sí, puedes :-), como muestra el siguiente ejemplo:
var x = null + (string)null;
var wtf = x.ToString();
funciona bien y no arroja una excepción en absoluto. La única diferencia es que debe convertir uno de los valores nulos en una cadena: si elimina la conversión (cadena) , el ejemplo aún se compila, pero arroja una excepción en tiempo de ejecución: "Operador '+' es ambiguo en operandos de escriba '<nulo>' y '<nulo>' ".
Nota: en el ejemplo de código anterior, el valor de x no es nulo como podría esperarse, en realidad es una cadena vacía después de haber convertido uno de los operandos en una cadena.
Otro hecho interesante es que en C # / .NET la forma en que null
se trata no siempre es la misma si se consideran diferentes tipos de datos. Por ejemplo:
int? x = 1; // string x = "1";
x = x + null + null;
Console.WriteLine((x==null) ? "<null>" : x.ToString());
Con respecto a la primera línea del fragmento de código: si x
es una variable entera anulable (es decir, que int?
contiene un valor) 1
, está obteniendo el resultado <null>
. Si es una cadena (como se muestra en el comentario) con valor "1"
, entonces está "1"
regresando en lugar de hacerlo <null>
.
Nota: también es interesante: si está utilizando var x = 1;
la primera línea, obtendrá un error de tiempo de ejecución. ¿Por qué? Debido a que la asignación convertirá la variable x
en el tipo de datos int
, que no es anulable. El compilador no asume int?
aquí, y por lo tanto falla en la segunda línea donde null
se agrega.
null.ToString()
se le dé el nombrewtf
. ¿Por qué te sorprende eso? No puede llamar a un método de instancia cuando no tiene nada para llamarlo en primer lugar.