我对流代码的结果感到困惑:
bool? _true = true;
bool? val1 = _true ?? true && false; //true
bool? val2 = (_true ?? true) && false; //false
Run Code Online (Sandbox Code Playgroud)
我以为结果应该是一样的,有人可以解释诸如行为吗?我注意到它至少在c#和dart中都相同,因此这应该是一个很好的理由。
Dav*_*idG 12
这是因为运算符具有优先权,因此&&
操作是在执行之前进行的??
。因此,您的第一行等效于:
bool? val1 = _true ?? (true && false);
Run Code Online (Sandbox Code Playgroud)
空合并运算符的优先级较低。在第一个示例中,true && false
计算结果为false
,剩下的true ?? false
计算结果为true
。
在第二个示例中,首先评估括号(至true
),true && false
结果为false
。
逻辑和运算符(&&
)的优先级高于空合并运算符(??
)。
所以
bool? val1 = _true ?? true && false; //true
Run Code Online (Sandbox Code Playgroud)
等于_true ?? (true && false)
。由于_true
不为null,因此null合并运算符返回此值(true
)。
在第二种情况下
bool? val2 = (_true ?? true) && false; //false
Run Code Online (Sandbox Code Playgroud)
括号中的部分true
再次出现,但与的false
结果为与false
。
请参阅C#运算符优先级
归档时间: |
|
查看次数: |
167 次 |
最近记录: |