Jon*_*eet 29
与以往一样,C#规范是这类事情的最佳选择.
从C#5规范的第7.13节(强调我的):
表单的空合并表达式
a ?? b需要a是可空类型或引用类型.如果a是非null,则结果a ?? b为a; 否则,结果是b.仅当null为null时,操作b才会计算a.
关于何时执行任何转换以及确切的行为,有更多详细信息,但这是给出问题的主要观点.另外值得一提的是,空合并运算符是右结合的,因此a ?? b ?? c被评价为a ?? (b ?? c)...这意味着它只会评价c,如果两者 a并b为空.
Ayd*_*din 11
为什么不试试:)
void Main()
{
var leftOrRight = left ?? right;
}
public bool? left
{
get
{
Console.WriteLine ("Left hit");
return true;
}
}
public bool right
{
get
{
Console.WriteLine ("Right hit");
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
问题的答案是no......第二个值没有得到评估