2016-08-23 3 views
4

Я только что увидел странный результат, в то время как я попытался объединить две строки null: он возвращает пустой! Я не могу себе представить, есть ли у него какая-то полезность или почему это происходит.Почему конкатенация двух нулевых строк приводит к пустой строке?

Пример:

string sns = null; 
sns = sns + sns; 
// It results in a String.Empty 

string snss = null; 
snss = String.Concat(snss, snss); 
// It results in a String.Empty too! 

Может кто-нибудь сказать мне, почему он возвращает String.Empty вместо null?

+1

Оператор '+' является сокращением для ['String.Concat'] (https://msdn.microsoft.com/en-us/library/a6d350wd (v = vs.110) .aspx) метод. Если переданные аргументы были «null», то они превращают их в пустую строку. –

ответ

3

Вот фрагмент из Спецификация языка C#, в разделе «7.8.4 оператор сложения»:

Объединение строк:

string operator +(string x, string y); 
string operator +(string x, object y); 
string operator +(object x, string y); 

Эти перегрузки бинарного + оператор выполняет конкатенацию. Если операндом конкатенации строк является null, будет заменена пустая строка. В противном случае любой нестроковый аргумент преобразуется в его строковое представление, вызывая виртуальный метод ToString, унаследованный от типа object. Если ToString возвращает null, будет заменена пустая строка.

+0

Хорошая находка, я мог бы найти ее D =. – TheNoob

+0

Подробнее в [Google Books] (https://books.google.com.br/books?id=s-IH_x6ytuQC&lpg=PT432&ots=lsc19Y7M6V&dq=%E2%80%9C7.8.4%20Addition%20operator%E2%80% 9D и гл = PT-BR & пг = PT433 # v = OnePage & д =% E2% 80% 9C7.8.4% 20Addition% 20operator% E2% 80% 9D & F = ложь) –

2

http://referencesource.microsoft.com/#mscorlib/system/string.cs

Если строка имеет нулевое значение, она возвращает String.Empty.

Что касается оператора +, я не уверен.

+2

Для downvote посмотрите на ln 3002. =) – TheNoob

+1

'+' просто использует метод 'Concat'. http://stackoverflow.com/questions/10341188/string-concatenation-using-operator – paqogomez

+0

@paqogomez приятно спасибо, плохо ознакомьтесь с этим вопросом. – TheNoob

Смежные вопросы