有关String Basics的MSDN文章显示了这一点:
string str = "hello"; string nullStr = null; string emptyStr = ""; string tempStr = str + nullStr; // tempStr = "hello" bool b = (emptyStr == nullStr);// b = false; string newStr = emptyStr + nullStr; // creates a new empty string int len = nullStr.Length; // throws NullReferenceException
为什么不与null连接抛出空引用异常?它是为了让程序员的生活更轻松,这样他们在连接之前不必检查null吗?
来自MSDN:
在字符串连接操作中,C#编译器将空字符串视为空字符串,但它不会转换原始空字符串的值.
有关+二元运算符的更多信息:
当一个或两个操作数的类型为字符串时,binary +运算符执行字符串连接.
如果字符串连接的操作数为null,则替换空字符串.否则,通过调用从类型对象继承的虚拟ToString方法,将任何非字符串参数转换为其字符串表示形式.
如果ToString返回null,则替换空字符串.
我同意概念上字符串只是值.但是,请考虑以下代码:
int? i = null; i += 1; // The result of this is that i == null
如果其他值类型运算符使用default()字符串运算符将null转换为""的方式,那么您的解释是有意义的.
为方便起见,最简单的说字符串运算符是一种快捷方式(特殊情况).