Enumerable.SequenceEqual Yöntem

Tanım

İki dizinin eşitlik karşılaştırıcısına göre eşit olup olmadığını belirler.

Aşırı Yüklemeler

SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)

Türleri için varsayılan eşitlik karşılaştırıcısını kullanarak öğeleri karşılaştırarak iki dizinin eşit olup olmadığını belirler.

SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)

Belirtilen IEqualityComparer<T>bir kullanarak öğelerini karşılaştırarak iki dizinin eşit olup olmadığını belirler.

SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)

Kaynak:
SequenceEqual.cs
Kaynak:
SequenceEqual.cs
Kaynak:
SequenceEqual.cs

Türleri için varsayılan eşitlik karşılaştırıcısını kullanarak öğeleri karşılaştırarak iki dizinin eşit olup olmadığını belirler.

C#
public static bool SequenceEqual<TSource> (this System.Collections.Generic.IEnumerable<TSource> first, System.Collections.Generic.IEnumerable<TSource> second);

Tür Parametreleri

TSource

Giriş dizilerinin öğelerinin türü.

Parametreler

first
IEnumerable<TSource>

ile karşılaştıracak secondbirIEnumerable<T>.

second
IEnumerable<TSource>

IEnumerable<T> İlk diziyle karşılaştırmak için bir.

Döndürülenler

true İki kaynak dizisi eşit uzunluktaysa ve karşılık gelen öğeleri türleri için varsayılan eşitlik karşılaştırıcısına göre eşitse; aksi takdirde , false.

Özel durumlar

first veya second şeklindedir null.

Örnekler

Aşağıdaki kod örnekleri, iki sıranın eşit olup olmadığını belirlemek için nasıl kullanılacağını SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) gösterir. İlk iki örnekte yöntemi, karşılaştırılan dizilerin aynı nesnelere başvuru içerip içermediğini belirler. Üçüncü ve dördüncü örneklerde yöntemi, dizilerdeki nesnelerin gerçek verilerini karşılaştırır.

Bu örnekte diziler eşittir.

C#
class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static void SequenceEqualEx1()
{
    Pet pet1 = new Pet { Name = "Turbo", Age = 2 };
    Pet pet2 = new Pet { Name = "Peanut", Age = 8 };

    // Create two lists of pets.
    List<Pet> pets1 = new List<Pet> { pet1, pet2 };
    List<Pet> pets2 = new List<Pet> { pet1, pet2 };

    bool equal = pets1.SequenceEqual(pets2);

    Console.WriteLine(
        "The lists {0} equal.",
        equal ? "are" : "are not");
}

/*
 This code produces the following output:

 The lists are equal.
*/

Aşağıdaki kod örneği, eşit olmayan iki diziyi karşılaştırır. Dizilerin aynı verileri içerdiğini, ancak içerdikleri nesnelerin farklı başvurulara sahip olduğundan dizilerin eşit olarak kabul edilmediğini unutmayın.

C#
class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static void SequenceEqualEx2()
{
    Pet pet1 = new Pet() { Name = "Turbo", Age = 2 };
    Pet pet2 = new Pet() { Name = "Peanut", Age = 8 };

    // Create two lists of pets.
    List<Pet> pets1 = new List<Pet> { pet1, pet2 };
    List<Pet> pets2 =
        new List<Pet> { new Pet { Name = "Turbo", Age = 2 },
                        new Pet { Name = "Peanut", Age = 8 } };

    bool equal = pets1.SequenceEqual(pets2);

    Console.WriteLine("The lists {0} equal.", equal ? "are" : "are not");
}

/*
 This code produces the following output:

 The lists are not equal.
*/

Yalnızca başvurularını karşılaştırmak yerine dizilerdeki nesnelerin gerçek verilerini karşılaştırmak istiyorsanız, sınıfınızda genel arabirimi uygulamanız IEqualityComparer<T> gerekir. Aşağıdaki kod örneği, bu arabirimin bir yardımcı sınıfında nasıl uygulanıp ve Equals yöntemlerinin nasıl sağlanıp sağlandırılamını GetHashCode gösterir.

C#
public class ProductA : IEquatable<ProductA>
{
    public string Name { get; set; }
    public int Code { get; set; }

    public bool Equals(ProductA other)
    {
        if (other is null)
            return false;

        return this.Name == other.Name && this.Code == other.Code;
    }

    public override bool Equals(object obj) => Equals(obj as ProductA);
    public override int GetHashCode() => (Name, Code).GetHashCode();
}

Bu arabirimi uyguladıktan sonra, aşağıdaki örnekte gösterildiği gibi yöntemindeki SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) nesne dizilerini ProductA kullanabilirsiniz:

C#

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

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

bool equalAB = storeA.SequenceEqual(storeB);

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

/*
    This code produces the following output:

    Equal? True
*/

Açıklamalar

yöntemi, SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) iki kaynak dizisini paralel olarak numaralandırır ve için varsayılan eşitlik karşılaştırıcısını kullanarak karşılık gelen öğeleri karşılaştırırTSourceDefault.

Türlerin değerlerini karşılaştırmak için varsayılan eşitlik karşılaştırıcısı Defaultkullanılır. Özel bir veri türünü karşılaştırmak için ve GetHashCode yöntemlerini geçersiz kılmanız Equals ve isteğe bağlı olarak özel türdeki genel arabirimi uygulamanız IEquatable<T> gerekir. Daha fazla bilgi için özelliğine Default bakın.

Şunlara uygulanır

.NET 9 ve diğer sürümler
Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)

Kaynak:
SequenceEqual.cs
Kaynak:
SequenceEqual.cs
Kaynak:
SequenceEqual.cs

Belirtilen IEqualityComparer<T>bir kullanarak öğelerini karşılaştırarak iki dizinin eşit olup olmadığını belirler.

C#
public static bool SequenceEqual<TSource> (this System.Collections.Generic.IEnumerable<TSource> first, System.Collections.Generic.IEnumerable<TSource> second, System.Collections.Generic.IEqualityComparer<TSource> comparer);
C#
public static bool SequenceEqual<TSource> (this System.Collections.Generic.IEnumerable<TSource> first, System.Collections.Generic.IEnumerable<TSource> second, System.Collections.Generic.IEqualityComparer<TSource>? comparer);

Tür Parametreleri

TSource

Giriş dizilerinin öğelerinin türü.

Parametreler

first
IEnumerable<TSource>

ile karşılaştıracak secondbirIEnumerable<T>.

second
IEnumerable<TSource>

IEnumerable<T> İlk diziyle karşılaştırmak için bir.

comparer
IEqualityComparer<TSource>

IEqualityComparer<T> Öğeleri karşılaştırmak için kullanılacak bir.

Döndürülenler

true İki kaynak dizisi eşit uzunluktaysa ve karşılık gelen öğeleri ile eşitse comparer; aksi takdirde , false.

Özel durumlar

first veya second şeklindedir null.

Örnekler

Aşağıdaki örnekte yönteminde kullanılabilecek bir eşitlik karşılaştırıcısının nasıl uygulanacağı gösterilmektedir SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>) .

C#
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;
    }
}

Bu karşılaştırıcıyı uyguladıktan sonra, aşağıdaki örnekte gösterildiği gibi yöntemindeki SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>) nesne dizilerini Product kullanabilirsiniz:

C#

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
*/

Açıklamalar

yöntemi, SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>) iki kaynak dizisini paralel olarak numaralandırır ve belirtilen IEqualityComparer<T>öğesini kullanarak ilgili öğeleri karşılaştırır. ise comparernull, öğeleri karşılaştırmak için varsayılan eşitlik karşılaştırıcısı Defaultkullanılır.

Şunlara uygulanır

.NET 9 ve diğer sürümler
Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0