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 nullse 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 xes 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 xen 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 nullse 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.