首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >布尔表达式,为什么只有两项?

布尔表达式,为什么只有两项?
EN

Stack Overflow用户
提问于 2010-06-09 23:29:37
回答 8查看 383关注 0票数 4

假设它是有效的,所以可以这样写

代码语言:javascript
复制
a = b = c = 2;

它也会很好,而不是

代码语言:javascript
复制
bool allTwo = a == 2 && b == 2 && c == 2;

改为写

代码语言:javascript
复制
bool allTwo = a == b == c == 2;

但我不能,因为== b的计算结果是布尔值,而布尔值不能与整数进行比较。

有没有语言设计的原因,它是这样实现的?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-06-09 23:40:45

表达式a == b的类型是boolean,因此您要么必须打破表达式的含义与上下文相同的规则,要么使用n元==运算符,以便将a == b == c解析为(== a b c)而不是(== (== a b) c)。这意味着您需要使用(a == b) == c将布尔值c与(a == b)的结果进行比较,这是可以的,但不是C#传统中的简单C风格的语法。

票数 8
EN

Stack Overflow用户

发布于 2010-06-09 23:33:46

那么,表达式c == 2将返回true,因此将btrue而不是2进行比较。

编辑:它很可能是这样实现的,因为这就是C风格的语言处理布尔表达式的方式。他们必须为多个术语创建一个特殊的异常,并以不同的方式实现它,而使用赋值运算符则更简单:最右侧的表达式计算为一个值,该值可以逻辑上应用于链中的下一个表达式。看起来设计师采用了简单的方法。

票数 5
EN

Stack Overflow用户

发布于 2010-06-10 01:30:04

从我的角度来看,这是一个清晰的问题。如果由我决定,我会考虑添加这样的语言功能可能会增加太多关于如何计算复杂表达式的歧义。A == b == c和(a == b) == c在某些情况下是不同的吗?如果我真的想将c与== b的布尔结果进行比较,而不是将c与b进行比较,该怎么办?在大多数情况下,编译器可能会找出正确的比较,但如果c是隐式转换为bool的,尽管可能性不大,那么可能无法判断。

因此,就我个人而言,我不确定是否值得这么麻烦。虽然它在语法上可能看起来不是很好,但您可以构建自己的实用函数来比较多个对象的相等性,如下所示:

代码语言:javascript
复制
    public static bool Equals(this object x, params object[] y)
    {
        for (int i = 0; i < y.Length; i++)
        {
            if (!object.Equals(x, y[i]))
                return false;
        }
        return true;
    }

然后你可以像这样使用它:

代码语言:javascript
复制
        if (a.Equals(b, c, d, e, f, g))
        {
            // ...
        }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3007288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档