我已经创建了一个简单的例子来提出这个问题.
以下代码编译并运行:
static void Main(string[] args) { string bigString, littleString; littleString = null; bigString = "word " + littleString + " word"; }
此代码编译但抛出运行时NullReference异常.
static void Main(string[] args) { string bigString, littleString; littleString = null; bigString = "word " + littleString.ToString() + " word"; }
为什么第一个代码不会抛出类似的异常?我本以为,为了将它连接到其他字符串,会隐含使用ToString(),此时它会遇到与第二段代码相同的基本问题.
第一个片段根本不打电话ToString
.它调用string.Concat(string, string)
在其实现中,将null
值处理为空字符串.它不需要调用ToString
将该参数转换为string
(无论是否null
),因为它已经是一个string
.(如果不是一个string
,那么就需要调用ToString
它,但它只有这样做,如果它不是null
).