Как сравнить два общих списка в 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.

Другие вопросы по тегам