Кто-то сказал в этой ветке обсуждения, что вы не можете сделать строку из ничего.
(что, на мой взгляд, хорошая фраза). Но да - вы можете :-), как показывает следующий пример:
var x = null + (string)null;
var wtf = x.ToString();
отлично работает и вообще не вызывает исключения. Единственное отличие состоит в том, что вам нужно преобразовать один из нулей в строку - если вы удалите приведение (string) , то пример все равно компилируется, но выдает исключение времени выполнения: «Оператор '+' неоднозначен для операндов введите '<null>' и '<null>' ".
NB. В приведенном выше примере кода значение x не равно нулю, как вы могли ожидать, это фактически пустая строка после преобразования одного из операндов в строку.
Другой интересный факт заключается в том, что в C # / .NET способ nullобработки не всегда одинаков, если рассматривать разные типы данных. Например:
int? x = 1; // string x = "1";
x = x + null + null;
Console.WriteLine((x==null) ? "<null>" : x.ToString());
Что касается 1-й строки фрагмента кода: если xэто целочисленная переменная, допускающая значение NULL (т. Е. int?), Содержащая значение 1, то вы получаете результат <null>обратно. Если это строка (как показано в комментарии) со значением "1", то вы "1"скорее возвращаетесь, чем <null>.
NB Также интересно: если вы используете var x = 1;для первой строки, вы получаете ошибку времени выполнения. Зачем? Поскольку присвоение превратит переменную xв тип данных int, который не допускает значения NULL. Компилятор здесь не предполагает int?, и, следовательно, не работает во второй строке, где nullдобавлено.
null.ToString()дали имяwtf. Почему это вас удивляет? Вы не можете вызвать метод экземпляра, если вам не из чего его вызывать.