这在C#中是否有可能:if(a == b == c == d){...}

pen*_*ake 6 c# comparison equality operators

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

something like:

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

//do something

}
Run Code Online (Sandbox Code Playgroud)

谢谢

Joa*_*uer 30

if (a == b && b == c && c == d) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

  • 13分钟在52分钟?这实际上是带来代表的简单问题. (8认同)
  • @Joachim:不要告诉我你需要24k代表才能意识到...... ^^ (3认同)

Fra*_*oto 15

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)) 
Run Code Online (Sandbox Code Playgroud)

这可能有助于:)

  • 在`if`中,我会使用`!args [i] .Equals(args [i - 1])`.这允许使用实现`IEqualityComparer`的引用类型.默认情况下,`==`比较ref类型的引用相等性,而不是它的基础值. (5认同)

Zan*_*ano 13

在C#,相等运算符(==)的计算结果为bool这样5 == 6的计算结果为false.

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

(((5 == 6) == 2) == 2)
Run Code Online (Sandbox Code Playgroud)

评估为

((false == 2) == 2)
Run Code Online (Sandbox Code Playgroud)

这会尝试将a bool与a进行比较int.只有当你以这种方式比较布尔值时,语法才有效,但可能不会做你想要的.

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

 a == b && b == c && c == d
Run Code Online (Sandbox Code Playgroud)


Sna*_*ake 5

不,这是不可能的,你必须将它分成单独的语句.

if(x == y && x == z) // now y == z
{
}
Run Code Online (Sandbox Code Playgroud)

祝好运