对于我的无知感到抱歉,但是我已经尝试了很长时间没有合理的解释:
为什么+
运算符在任何参数为null
时不会抛出任何异常;
例如:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args) {
string str = null;
Console.WriteLine(str + "test");
Console.ReadKey();
}
}
}
答案 0 :(得分:8)
因为C#编译器会在您的操作中将+
运算符转换为String.Concat
method,并且当您尝试连接""
时此方法使用空字符串null
。
使用空字符串代替任何
null
参数。
binary +运算符在一个或两个时执行字符串连接 操作数是字符串类型。如果字符串连接的操作数是
null
,替换空字符串。否则,任何非字符串 通过调用,将参数转换为其字符串表示形式 从类型对象继承的虚拟ToString
方法。如果ToString
返回null
,替换为空字符串。
同样来自reference source;
if (IsNullOrEmpty(str0))
{
if (IsNullOrEmpty(str1))
{
return String.Empty;
}
return str1;
}