为什么连接两个空字符串会产生一个空字符串?

时间:2016-08-23 21:56:06

标签: c# string concatenation

当我尝试连接两个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吗?

2 个答案:

答案 0 :(得分:4)

以下是来自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,则会替换空字符串。

答案 1 :(得分:2)

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

如果字符串为null,则返回String.Empty。

至于运营商+,我不太确定。