【问题标题】:Simpler way to compare pairs of bools?比较布尔值对的更简单方法?
【发布时间】:2013-01-29 14:07:11
【问题描述】:

假设我有以下布尔值:

  • 是A
  • 是B
  • 是C
  • 是ExistingA
  • 是ExistingB
  • 是ExistingC

当isA、isB、isC为真时,如果所有真bool对应的isExisting bool都为真,我想做点什么。如果 isA、isB 或 isC 为 false,则其对应的 isExisting bool 无关紧要。

这是我想出的:

if ((isA || isB || isC)
    && ((!isA || isExistingA)
    && (!isB || isExistingB)
    && (!isC || isExistingC)))
{
    // do something
}

我今天显然无法思考,想知道是否有更简单的方法来表达这一点。

【问题讨论】:

  • 对我来说似乎很合理,虽然 && 是关联的,所以你不需要在第二个和第三个括号周围额外的括号。
  • @Neil:我认为额外的括号使它更具可读性。
  • 另外,@John Straka:您使用多行和缩进的方式使语句更易于阅读:)
  • 缺少的运算符是implies。似乎几乎不值得添加。
  • 我通常将它们分组为方法,以使if 语句在变得如此复杂时更具可读性。

标签: c# comparison boolean


【解决方案1】:

Wolfram Alpha 可以简化布尔方程,试试这个link

不过,我认为不要太担心这一点,保持 if 语句的简洁和可读性比担心紧凑性或性能更重要。

【讨论】:

    【解决方案2】:

    问题是要求虽然只有一个isX 变量必须为真,但所有isX 变量都必须检查。所以我认为你不能写一个“比较”更少的陈述。

    我认为您当前的解决方案是最短的形式,但如果我在没有解释的情况下阅读该代码,我可能不看两次就无法理解它(我假设实际名称更具描述性,也许更有意义读者)。

    【讨论】:

    • 我同意,这有点迟钝。不过,使用公司名称更有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2010-10-11
    • 1970-01-01
    相关资源
    最近更新 更多