(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Enumerable.SequenceEqual<TSource>-Methode (IEnumerable<TSource>, IEnumerable<TSource>)

Bestimmt, ob zwei Sequenzen gleich sind, indem die Elemente mithilfe des Standardgleichheitsvergleichs für ihren Typ verglichen werden.

Namespace:  System.Linq
Assembly:  System.Core (in System.Core.dll)

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

Typparameter

TSource

Der Typ der Elemente der Eingabesequenzen.

Parameter

first
Typ: System.Collections.Generic.IEnumerable<TSource>
Ein IEnumerable<T>, das mit second verglichen werden soll.
second
Typ: System.Collections.Generic.IEnumerable<TSource>
Ein IEnumerable<T>, das mit der ersten Sequenz verglichen werden soll.

Rückgabewert

Typ: System.Boolean
true , wenn die zwei Quellsequenzen von gleicher Länge sind und ihre entsprechenden Elemente durch den Standardgleichheitsvergleich für ihren Typ als gleich bestimmt werden, andernfalls false.

Hinweis zur Verwendung

In Visual Basic und C# können Sie diese Methode als Instanzenmethode für ein beliebiges Objekt vom Typ IEnumerable<TSource> aufrufen. Bei Verwendung der Syntax für Instanzenmethoden lassen Sie den ersten Parameter aus. Weitere Informationen finden Sie unter Erweiterungsmethoden (Visual Basic) und Erweiterungsmethoden (C#-Programmierhandbuch).

AusnahmeBedingung
ArgumentNullException

first oder second ist null.

Die SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)-Methode listet die beiden Quellsequenzen gleichzeitig auf und vergleicht entsprechende Elemente mithilfe des Standardgleichheitsvergleichs für TSourceDefault. Der Standardvergleich auf Gleichheit, Default, wird zum Vergleichen der Typen verwendet, die die generische IEqualityComparer<T>-Schnittstelle implementieren. Zum Vergleichen eines benutzerdefinierten Datentyps müssen Sie diese Schnittstelle implementieren und eine eigene GetHashCode-Methode und Equals-Methode bereitstellen.

In folgenden Codebeispielen wird veranschaulicht, wie mithilfe von SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) bestimmt wird, ob zwei Sequenzen gleich sind. In den ersten zwei Beispielen bestimmt die Methode, ob die verglichenen Sequenzen Verweise auf die gleichen Objekte enthalten. Im dritten und vierten Beispiel vergleicht die Methode die tatsächlichen Daten der Objekte innerhalb der Sequenzen.

In diesem Beispiel sind die Sequenzen gleich.


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



Im folgenden Codebeispiel werden zwei Sequenzen verglichen, die nicht gleich sind. Beachten Sie, dass die Sequenzen identische Daten enthalten, aber da die Objekte, die sie enthalten, über andere Verweise verfügen, werden die Sequenzen nicht als gleich angesehen.


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



Wenn Sie die eigentlichen Daten der Objekte in den Sequenzen und nicht nur die Verweise vergleichen möchten, müssen Sie die generische IEqualityComparer<T>-Schnittstelle in der Klasse implementieren. Das folgende Codebeispiel zeigt, wie diese Schnittstelle in einer Hilfsklasse implementiert und GetHashCode und Equals für Methoden bereitstellt.


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

public class ProductComparer : IEqualityComparer<ProductA>
{

    public bool Equals(ProductA x, ProductA y)
    {
        //Check whether the objects are the same object. 
        if (Object.ReferenceEquals(x, y)) return true;

        //Check whether the products' properties are equal. 
        return x != null && y != null && x.Code.Equals(y.Code) && x.Name.Equals(y.Name);
    }

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

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

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


Nachdem Sie diese Schnittstelle implementiert haben, können Sie in der SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)-Methode Sequenzen von ProductA-Objekten verwenden, wie im folgenden Beispiel gezeigt.



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



.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft