Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

Метод Enumerable.SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)

 

Опубликовано: Октябрь 2016

Определяет, равны ли две последовательности, сравнивая их элементы с помощью указанного IEqualityComparer<T>.

Пространство имен:   System.Linq
Сборка:  System.Core (в System.Core.dll)

public static bool SequenceEqual<TSource>(
	this IEnumerable<TSource> first,
	IEnumerable<TSource> second,
	IEqualityComparer<TSource> comparer
)

Параметры

first
Type: System.Collections.Generic.IEnumerable<TSource>

IEnumerable<T> Для сравнения с second.

second
Type: System.Collections.Generic.IEnumerable<TSource>

IEnumerable<T> Для сравнения с первой последовательностью.

comparer
Type: System.Collections.Generic.IEqualityComparer<TSource>

IEqualityComparer<T> Можно использовать для сравнения элементов.

Возвращаемое значение

Type: System.Boolean

true Если у двух исходных последовательностей одинаковая длина и их соответствующие элементы совпадают согласно comparer; в противном случае — false.

Параметры типа

TSource

Тип элементов входных последовательностей.

Exception Condition
ArgumentNullException

Параметр first или second имеет значение null.

SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>) Метод перечисляет у двух исходных последовательностей параллельно и сравнивает соответствующие элементы с помощью заданного IEqualityComparer<T>. Если comparernull, компаратор по умолчанию Default, используемый для сравнения элементов.

В следующем примере показана реализация компаратор, который может использоваться в SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>) метод.

public class Product
{
    public string Name { get; set; }
    public int Code { get; set; }
}

// Custom comparer for the Product class
class ProductComparer : IEqualityComparer<Product>
{
    // Products are equal if their names and product numbers are equal.
    public bool Equals(Product x, Product y)
    {

        //Check whether the compared objects reference the same data.
        if (Object.ReferenceEquals(x, y)) return true;

        //Check whether any of the compared objects is null.
        if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
            return false;

        //Check whether the products' properties are equal.
        return x.Code == y.Code && x.Name == y.Name;
    }

    // If Equals() returns true for a pair of objects 
    // then GetHashCode() must return the same value for these objects.

    public int GetHashCode(Product product)
    {
        //Check whether the object is null
        if (Object.ReferenceEquals(product, null)) return 0;

        //Get hash code for the Name field if it is not null.
        int hashProductName = product.Name == null ? 0 : product.Name.GetHashCode();

        //Get hash code for the Code field.
        int hashProductCode = product.Code.GetHashCode();

        //Calculate the hash code for the product.
        return hashProductName ^ hashProductCode;
    }

}

После реализации этой функции сравнения можно использовать последовательности Product объекты в SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>) метода, как показано в следующем примере.


Product[] storeA = { new Product { Name = "apple", Code = 9 }, 
                       new Product { Name = "orange", Code = 4 } };

Product[] storeB = { new Product { Name = "apple", Code = 9 }, 
                       new Product { Name = "orange", Code = 4 } };

bool equalAB = storeA.SequenceEqual(storeB, new ProductComparer());

Console.WriteLine("Equal? " + equalAB);

/*
    This code produces the following output:

    Equal? True
*/

Универсальная платформа Windows
Доступно с 8
.NET Framework
Доступно с 3.5
Переносимая библиотека классов
Поддерживается в: переносимые платформы .NET
Silverlight
Доступно с 2.0
Windows Phone Silverlight
Доступно с 7.0
Windows Phone
Доступно с 8.1
Вернуться в начало
Показ: