Возможно ли это как-то в C #: if (a == b == c == d) {...} - PullRequest
6 голосов
/ 30 апреля 2010

Есть ли быстрый способ сравнить равенство нескольких значений в C #?

something like:

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

//do something

}

Спасибо

Ответы [ 5 ]

29 голосов
/ 30 апреля 2010
if (a == b && b == c && c == d) {
    // do something
}
15 голосов
/ 30 апреля 2010
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)) 

Это может помочь:)

13 голосов
/ 30 апреля 2010

В C # оператор равенства (==) оценивается в bool, поэтому 5 == 6 оценивается в false.

Сравнение 5 == 6 == 2 == 2 будет переводиться в

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

, что соответствует

((false == 2) == 2)

, который попытается сравнить bool с int. Только если вы сравните логические значения таким образом, синтаксис будет действительным, но, вероятно, не будет делать то, что вы хотите.

Метод множественного сравнения - это то, что @Joachim Sauer предложил:

 a == b && b == c && c == d
5 голосов
/ 30 апреля 2010

Нет, это невозможно, вы должны разделить его на отдельные утверждения.

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

Удачи

1 голос
/ 30 апреля 2010

Нет прямого способа сделать это с помощью C #, но вы можете пойти с некоторым вспомогательным классом. Ознакомьтесь с этой темой VB.NET, посвященной этой проблеме VB.Net: проверить множественные значения на равенство?

...