我有一个代码连接使用加号运算符的两个字符串。如果两个字符串为空,则两个字符串的和不为空。我想区分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