我对流代码的结果感到困惑:
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 次 |
| 最近记录: |