【问题标题】:Is this possible somehow in C# : if (a==b==c==d) {...}这在 C# 中是否可能: if (a==b==c==d) {...}
【发布时间】:2025-12-07 03:10:01
【问题描述】:

有没有一种快速的方法来比较 C# 中多个值的相等性?

something like:

if (5==6==2==2){

//do something

}

谢谢

【问题讨论】:

    标签: c# comparison operators equality


    【解决方案1】:
    if (a == b && b == c && c == d) {
        // do something
    }
    

    【讨论】:

    • 在 52 分钟内获得 13 次支持?事实上,简单的问题会带来代表。
    • 简短的答案? :-)
    • @Joachim:别告诉我你需要 24k 代表才能意识到这一点...... ^^
    • @tanascius:我当然有过怀疑,但这只是对事实的一个令人印象深刻的证明。我写了很多我觉得非常好和彻底的答案,但只得到了一两个赞成票。
    • 我的猜测是,不懂你所指的专业的人根本不投票。
    【解决方案2】:

    在 C# 中,相等运算符 (==) 的计算结果为 bool,因此 5 == 6 的计算结果为 false

    比较 5 == 6 == 2 == 2 将转换为

    (((5 == 6) == 2) == 2)
    

    计算结果为

    ((false == 2) == 2)
    

    它将尝试将boolint进行比较。仅当您以这种方式比较布尔值时,语法才有效,但可能不会做您想要的。

    进行多重比较的方法是@Joachim Sauer 建议的:

     a == b && b == c && c == d
    

    【讨论】:

      【解决方案3】:
      public static class Common {
          public static bool AllAreEqual<T>(params T[] args)
          {
              if (args != null && args.Length > 1)
              {
                  for (int i = 1; i < args.Length; i++)
                  {
                      if (args[i] != args[i - 1]) return false;
                  }
              }
      
              return true;
          } 
      }
      
      ...
      
      if (Common.AllAreEqual<int>(a, b, c, d, e, f, g)) 
      

      这可能会有所帮助:)

      【讨论】:

      • if 中,我会使用!args[i].Equals(args[i - 1])。这允许使用实现IEqualityComparer 的引用类型。默认情况下,== 比较 ref 类型的引用相等性,而不是其基础值。
      【解决方案4】:

      不,这是不可能的,您必须将其拆分为单独的语句。

      if(x == y && x == z) // now y == z
      {
      }
      

      祝你好运

      【讨论】: