我有一個代碼連接使用加號運算符的兩個字符串。如果兩個字符串爲空,則兩個字符串的和不爲空。我想區分String.Empty + default(string)和default(string)+ default(string)。這兩個concat操作結果都是String.Empty。奇怪的空串連接行爲
爲什麼總數都是String.Empty?
我有一個代碼連接使用加號運算符的兩個字符串。如果兩個字符串爲空,則兩個字符串的和不爲空。我想區分String.Empty + default(string)和default(string)+ default(string)。這兩個concat操作結果都是String.Empty。奇怪的空串連接行爲
爲什麼總數都是String.Empty?
這是因爲空字符串爲空字符串MSDN處理:
在字符串連接操作中,C#編譯器將一個空字符串同一個空字符串,但不轉換原始的價值空字符串
運算符調用字符串參數的+
由C#編譯器翻譯爲調用string.Concat
方法。以下是此方法的說明文檔:
使用空字符串代替任何空參數。
所以基本上這是設計。 string.Concat
方法永遠不會返回null。
強調:'+'是由編譯器處理的,這不是您可以通過重載'operator +'來實現的類。 –
是的。這就是我在第一句話中提到的。 C++編譯器翻譯'+'運算符以調用string.Concat方法。 –
Thans。我會寫一個特殊的字符串concat方法。 – selami