当我在C#中搞弄的时候,我遇到了.Net编程中的奇怪行为。
我写了这段代码:
static void Main(string[] args)
{
string xyz = null;
xyz += xyz;
TestNullFunc(xyz);
Console.WriteLine(xyz);
Console.Read();
}
static void TestNullFunc(string abc)
{
if (abc == null)
{
Console.WriteLine("meow THERE ! ");
}
else
{
Console.WriteLine("No Meow ");
}
}
我得到的输出是No meow
,这意味着该字符串不是null
。为什么把两个null
字符串相加会得到一个非null
字符串?
在调试时,当我检查将xyz
与自身相加后的值时,其值为""
(没有字符)。
M()
返回字符串,你会如何优化M() + null
?编译器生成的代码不是String.Concat(M(), null)
或者String.Concat(M(), "")
,而是等价于M() ?? ""
。也就是说,使用M()
,但如果它返回null
就使用""
。 - Eric Lippert