如果左操作数到?? operator不为null,是否对右操作数进行求值?

Ant*_*yrd 16 .net c# operators

我正在考虑??在C#中使用运算符(null-coalescing operator).但是MSDN上的文档是有限的.

我的问题:如果左侧操作数不为null,右手操作数是否会被评估?

Jon*_*eet 29

与以往一样,C#规范是这类事情的最佳选择.

C#5规范的第7.13节(强调我的):

表单的空合并表达式a ?? b需要a是可空类型或引用类型.如果a是非null,则结果a ?? ba; 否则,结果是b.仅当null为null时,操作b才会计算a.

关于何时执行任何转换以及确切的行为,有更多详细信息,但这是给出问题的主要观点.另外值得一提的是,空合并运算符是右结合的,因此a ?? b ?? c被评价为a ?? (b ?? c)...这意味着它只会评价c,如果两者 ab为空.

  • @AntarrByrd:*总是*查看规范:) C#规范是我见过的最好写的之一,它是这类事情的权威来源. (9认同)

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......第二个值没有得到评估