2014-02-16 3 views
1

У меня есть код, объединяющий две строки с использованием оператора plus. Если две строки равны нулю, сумма двух строк не равна нулю.Странное поведение конкатенации пустой строки

var strLeft = default(string); 
var strRight = default(string); 

var strSum = strLeft + strRight; 

Я хочу отличить String.Empty + default (строка) и значение по умолчанию (строка) + значение по умолчанию (строка). Оба результата выполнения concat - String.Empty.

Почему результаты обоих сумм являются String.Empty?

ответ

1

Это потому, что пустая строка рассматривается как пустая строка MSDN:

В операции конкатенации строковых C# компилятор обрабатывает пустую строку так же, как пустая строка, но она не преобразует значение оригинала null string

+0

Thans. Я напишу специальный метод concat строки. – selami

4

+ Оператор вызывает строковые аргументы, транслируемые компилятором C# на вызовы метода string.Concat. И вот что описано в документации этого метода:

Пустая строка используется вместо любого нулевого аргумента.

Так что в основном это по дизайну. Метод string.Concat никогда не вернет null.

+0

Акцент: '+' обрабатывается компилятором, и это не то, что вы могли бы достичь для своего собственного класса путем перегрузки 'operator +' –

+0

Да, точно. Вот что я упомянул в своем первом предложении. Оператор '+' преобразуется компилятором C# в вызовы метода string.Concat. –

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