为什么连接两个空字符串会导致一个空字符串?

Str*_*lfa 5 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!
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么它返回a String.Empty而不是null

And*_*hin 4

以下是 C# 语言规范 \xe2\x80\x9c7.8.4 加法运算符\xe2\x80\x9d 部分的片段:

\n\n
\n

字符串连接:

\n\n
string operator +(string x, string y);\nstring operator +(string x, object y);\nstring operator +(object x, string y);\n
Run Code Online (Sandbox Code Playgroud)\n\n

二元+运算符的这些重载执行字符串连接。如果字符串连接的操作数为null,则替换为空字符串。否则,任何非字符串参数都会通过调用ToString从 type 继承的虚拟方法转换为其字符串表示形式object。如果ToString返回null,则替换为空字符串。

\n
\n