Как сравнить два общих списка в C# 3.0?
Возможный дубликат:
Есть ли встроенный метод для сравнения коллекций в C#?
Каков наилучший способ сравнения двух универсальных списков в C# 3.0?
3 ответа
Если вы хотите сравнить независимо от порядка элементов, попробуйте метод UnorderedEqual
Иначе:
var list1 = new List<int> { 1, 2, 3 };
var list2 = new List<int> { 1, 2, 3 };
var areSame = Enumerable.SequenceEqual(list1, list2);
Проверьте этот ответ, он предоставляет метод, который определяет, содержат ли две последовательности одинаковые элементы.
Если вы хотите сравнить две последовательности в.NET 3.5 и более поздних версиях (это версия платформы, с которой поставляется C# 3.0), вам следует использовать метод расширения SeqenceEqual для класса Enumerable в пространстве имен System.Linq.
Однако для этого он будет использовать компаратор равенства по умолчанию для параметра типа T в IEnumerable<T>
реализации это сравнение.
Если вы хотите изменить способ проверки на равенство, то вы должны передать реализацию IEqualityComparer<T>
к методу SequenceEqual для использования при сравнении элементов из каждой последовательности.
Кроме того, если вы пытаетесь увидеть, равны ли два набора (как представлено IEnumerable<T>
) тогда лучше всего проверить, использовать ли метод Except extension в классе Enumerable, и убедиться, что в результирующем наборе нет записей, и что IEnumerable<T>
Реализации имеют одинаковое количество записей (поскольку Except может возвращать пустую последовательность, даже если ей переданы последовательности различной длины), что можно сделать с помощью метода расширения Count.