在C#中使用??
运算符时,如果被测试的值不为空,是否会短路?
示例:
string test = null;
string test2 = test ?? "Default";
string test3 = test2 ?? test.ToLower();
test3行是成功还是抛出空引用异常?
另一种表达问题的方式:将右手表达的??如果左手不为空,则运算符得到评估?
答案 0 :(得分:47)
是的,它在C# Language Specification(由我突出显示)中这样说:
a ?? b
形式的空合并表达式要求a
具有可空类型或引用类型。如果a
为非空,则a ?? b
的结果为a
;否则,结果为b
。 仅当b
为空时,操作才会评估a
。
答案 1 :(得分:16)
是的,它短路。
class Program
{
public static void Main()
{
string s = null;
string s2 = "Hi";
Console.WriteLine(s2 ?? s.ToString());
}
}
上述程序输出“Hi”而不是抛出NullReferenceException
。
答案 2 :(得分:7)
是
public Form1()
{
string string1 = "test" ?? test();
MessageBox.Show(string1);
}
private string test()
{
MessageBox.Show("does not short circuit");
return "test";
}
如果它没有短路,将调用test()并且消息框将显示它“不会短路”。