在C#中使用??
运算符时,如果被测试的值不为空,是否会短路?
例子:
string test = null;
string test2 = test ?? "Default";
string test3 = test2 ?? test.ToLower();
test3 行成功还是抛出空引用异常?
所以用另一种方式来表达这个问题:右手会表达 ?? 如果左手不为空,则对运算符进行评估?
在C#中使用??
运算符时,如果被测试的值不为空,是否会短路?
例子:
string test = null;
string test2 = test ?? "Default";
string test3 = test2 ?? test.ToLower();
test3 行成功还是抛出空引用异常?
所以用另一种方式来表达这个问题:右手会表达 ?? 如果左手不为空,则对运算符进行评估?
是的,它在C# 语言规范中是这样说的(由我突出显示):
表单的空合并表达式
a ?? b
需要a
是可空类型或引用类型。如果a
为非空,则结果a ?? b
为a
;否则,结果为b
。该操作仅在为 null时进行评估。b
a
是的,它短路了。
class Program
{
public static void Main()
{
string s = null;
string s2 = "Hi";
Console.WriteLine(s2 ?? s.ToString());
}
}
上面的程序输出“Hi”而不是抛出NullReferenceException
.
是的。
public Form1()
{
string string1 = "test" ?? test();
MessageBox.Show(string1);
}
private string test()
{
MessageBox.Show("does not short circuit");
return "test";
}
如果它没有短路,将调用 test() 并且消息框会显示它“没有短路”。