布尔表达式,为什么只有两个术语?

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计算到一个布尔值,然后不能将其与整数进行比较.

是否有语言设计原因以这种方式实现?

Pet*_*ham 8

表达式的类型a == b是布尔值,因此您必须打破一个规则,即表达式无论其上下文是什么意思都是相同的,或者具有n-ary ==运算符,因此它a == b == c被解析为(== a b c)而不是(== (== a b) c).这意味着你需要(a == b) == c将布尔c与结果进行比较(a == b),这是好的,但不是C#在传统中的简单C语法风格.


Bob*_*Bob 5

好吧,表达式c == 2将返回true,因此b将被比较true而不是2.

编辑:这很可能是以这种方式实现的,因为C风格的语言处理布尔表达式.他们必须为多个术语制作一个特殊的例外并以不同的方式实现它,而使用赋值运算符则更直接:最正确的表达式求值为逻辑上可应用于链中下一个表达式的值.似乎设计师采取了简单的方法.