int a, b, c, d, e;
a = b = c = d = e = 1;
if ((a==b) && (b==c) && (c==d) && (d==e))
{
Console.WriteLine("that syntax is horrible");
}
есть ли более элегантный способ проверить множественное равенство, как указано выше?
может быть AreEqual(params obj[])
или что-то еще? У меня был Google, но ничего не нашел.
Возможная реализация AreEqual(params object[] objects)
:
(Следуя совету Джона Скита, здесь общая версия)
bool AreEqual<T>(params T[] objects)
{
if (objects.Length <= 1) return true;
return objects.Skip(1).All(x => x.Equals(objects[0]));
}
Skip(1)
также не является строго необходимым.
Вот общая версия, которая позволит избежать бокса (и быть более безопасным во время компиляции):
public static bool AllEqual<T>(T firstItem, params T[] items)
{
// Omitted error checking
EqualityComparer<T> comparer = EqualityComparer<T>.Default;
foreach (T item in items)
{
if (!comparer.Equals(firstItem, item))
{
return false;
}
}
return true;
}
Обратите внимание, что это будет не так удобно, если вы действительно хотите передать кучу значений, которые вы уже получили в массиве, но избегаете проблем с пустыми массивами - и означает, что у вас нет избыточных сравнений.
Нет, это самый разумный способ (я имею в виду наиболее читаемый, что является самым важным).
Реальный вопрос: зачем вам это нужно? Похоже, что плохой дизайн в первую очередь...
Если вы сравниваете простые типы, и у вас есть только несколько вариантов использования, вы можете создать несколько полезных методов, таких как:
bool AllEqual(int first, params int[] numbers)
{
return numbers.All(x => x == first);
}
Это весело
int a, b, c, d, e;
a = b = c = d = e = 1;
if ((a & b & c & d) == e)
{
Console.WriteLine("that syntax is horrible");
}
Забастовкa >
и, возможно, лучше
int a, b, c, d, e;
a = b = c = d = e = 1;
if (new[] {a, b, c, d, e}.All(i => i == a))
{
Console.WriteLine("Funky chicken");
}
&
делает побитово и. Результат оказывается правильным, если все значения равны, но он может быть неправильным для разных значений (т. Е. Результат все равно будет true
хотя значения не все равны).