Ed *_*ess 4 c# language-features boolean-expression
鉴于它的写作是有效的
a = b = c = 2;
Run Code Online (Sandbox Code Playgroud)
它也会很好,而不是
bool allTwo = a == 2 && b == 2 && c == 2;
Run Code Online (Sandbox Code Playgroud)
改为写
bool allTwo = a == b == c == 2;
Run Code Online (Sandbox Code Playgroud)
但我不能,因为a == b计算到一个布尔值,然后不能将其与整数进行比较.
是否有语言设计原因以这种方式实现?
表达式的类型a == b是布尔值,因此您必须打破一个规则,即表达式无论其上下文是什么意思都是相同的,或者具有n-ary ==运算符,因此它a == b == c被解析为(== a b c)而不是(== (== a b) c).这意味着你需要(a == b) == c将布尔c与结果进行比较(a == b),这是好的,但不是C#在传统中的简单C语法风格.
好吧,表达式c == 2将返回true,因此b将被比较true而不是2.
编辑:这很可能是以这种方式实现的,因为C风格的语言处理布尔表达式.他们必须为多个术语制作一个特殊的例外并以不同的方式实现它,而使用赋值运算符则更直接:最正确的表达式求值为逻辑上可应用于链中下一个表达式的值.似乎设计师采取了简单的方法.
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |