Alguém disse neste tópico de discussão que você não pode criar uma string do nada.
(que é uma frase legal como eu acho). Mas sim - você pode :-), como mostra o exemplo a seguir:
var x = null + (string)null;
var wtf = x.ToString();
funciona bem e não lança uma exceção. A única diferença é que você precisa converter um dos nulos em uma string - se você remover a string (string) , o exemplo ainda será compilado, mas lançará uma exceção em tempo de execução: "Operator '+' é ambíguo nos operandos de digite '<null>' e '<null>' ".
NB No exemplo de código acima, o valor de x não é nulo como você poderia esperar; na verdade, é uma sequência vazia depois de converter um dos operandos em uma sequência.
Outro fato interessante é que, em C # / .NET, a maneira como nullé tratada nem sempre é a mesma se você considerar diferentes tipos de dados. Por exemplo:
int? x = 1; // string x = "1";
x = x + null + null;
Console.WriteLine((x==null) ? "<null>" : x.ToString());
Considere a 1ª linha do trecho de código: se xfor uma variável inteira anulável (ou seja int?) que contém valor 1, você estará recebendo o resultado de <null>volta. Se for uma string (como mostrado no comentário) com valor "1", você estará "1"retornando em vez de <null>.
Nota: também interessante: se você estiver usando var x = 1;a primeira linha, receberá um erro de tempo de execução. Por quê? Porque a atribuição transformará a variável xno tipo de dados int, que não é anulável. O compilador não assume int?aqui e, portanto, falha na segunda linha em que nullé adicionado.
null.ToString()receba esse nomewtf. Por que isso te surpreende? Você não pode chamar um método de instância quando não tem nada para chamá-lo.