Сравнение равенства между несколькими переменными - PullRequest
36 голосов
/ 15 июля 2010

У меня есть ситуация, когда мне нужно проверить, имеют ли несколько переменных одинаковые данные, например

var x=1;
var y=1;
var z=1;

Я хочу проверить, x == 1 и y == 1 z == 1 (это может быть «1» или другое значение).вместо этого, есть ли какой-нибудь короткий путь, которым я могу достичь того же, что и ниже

if(x==y==z==1)

Возможно ли это в C #?

Ответы [ 14 ]

0 голосов
/ 18 декабря 2014

Вот как я это сделал:

Debug.Assert(new List<int> { l1.Count, l2.Count, l3.Count, l4.Count }.TrueForAll(
  delegate(int value) { return value == l1.Count; }), "Tables have different size.");
0 голосов
/ 04 июля 2012

Я адаптировал решение Мау в метод расширения. Было бы хорошо, если бы они добавили это в структуру для всех типов значений.

public static class IntegerExtensions
{
    public static bool EqualsAll(this int subject, params int[] values)
    {
        if (values == null || values.Length == 0)
        {
            return true;
        }

        return values.All(v => v == subject);
    }
}
0 голосов
/ 15 июля 2010
var x = 1;
var y = 1;
var z = 1;

if (AllEqual(1, x, y, z))    // true
if (AllEqual(2, x, y, z))    // false
if (AllEqual(x, y, z))       // true

var a = 1;
var b = 2;
var c = 3;

if (AllEqual(a, b, c))       // false

// ...

public static bool AllEqual<T>(params T[] values)
{
    if (values == null)
        throw new ArgumentNullException("values");

    if (values.Length < 1)
        throw new ArgumentException("Values cannot be empty.", "values");

    T value = values[0];
    for (int i = 1; i < values.Length; i++)
    {
        if (!value.Equals(values[i]))
            return false;
    }
    return true;
}
0 голосов
/ 15 июля 2010

На самом деле мне не нужно время, чтобы кодировать, но метод расширения с linq, подобный этому

public bool EqualsToAll<T>(this T element, IEnumerable<T> source)
{
    if(element == null)
        throw new ArgumentNullException(element);

    foreach(var item in source)
    {
        if(!element.Equals(item)
            return false;
    }

    return true;
}

должен сделать это.

Предупреждение: Этот код не был ни протестирован, ни написан в среде IDE.

...