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 x
for 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 x
no 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.