2014-02-16 102 views
1

我有一个代码连接使用加号运算符的两个字符串。如果两个字符串为空,则两个字符串的和不为空。我想区分String.Empty + default(string)和default(string)+ default(string)。这两个concat操作结果都是String.Empty。奇怪的空串连接行为

为什么总数都是String.Empty?

回答

1

这是因为空字符串为空字符串MSDN处理:

在字符串连接操作中,C#编译器将一个空字符串同一个空字符串,但不转换原始的价值空字符串

+0

Thans。我会写一个特殊的字符串concat方法。 – selami

4

运算符调用字符串参数的+由C#编译器翻译为调用string.Concat方法。以下是此方法的说明文档:

使用空字符串代替任何空参数。

所以基本上这是设计。 string.Concat方法永远不会返回null。

+0

强调:'+'是由编译器处理的,这不是您可以通过重载'operator +'来实现的类。 –

+0

是的。这就是我在第一句话中提到的。 C++编译器翻译'+'运算符以调用string.Concat方法。 –