Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

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

 

Veröffentlicht: Oktober 2016

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
)

Parameter

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

Ein IEnumerable<T> für den Vergleich second.

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

Ein IEnumerable<T> mit der ersten Sequenz verglichen werden soll.

Rückgabewert

Type: System.Boolean

true Wenn die zwei Quellsequenzen von gleicher Länge sind und ihre entsprechenden Elemente gemäß den Standardgleichheitsvergleich für ihren Typ gleich sind; andernfalls false.

Typparameter

TSource

Der Typ der Elemente der Eingabesequenzen.

Exception Condition
ArgumentNullException

first oder second ist null.

Die SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) -Methode listet die zwei Quellsequenzen gleichzeitig auf und vergleicht entsprechende Elemente mithilfe des Standardgleichheitsvergleichs für TSource, Default. Der Standardgleichheitsvergleich Default, wird verwendet, um die Werte der Typen verglichen, die Implementierung der IEqualityComparer<T> generische Schnittstelle. Um einen benutzerdefinierten Datentyp zu vergleichen, müssen Sie diese Schnittstelle implementieren, und geben Sie eigene GetHashCode und Equals Methoden für den Typ.

Im folgenden Codebeispiel wird veranschaulicht, wie mit SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) zu bestimmen, ob zwei Sequenzen gleich sind. In den ersten beiden Beispielen bestimmt die Methode an, ob die verglichenen Sequenzen Verweise auf dieselben Objekte enthalten. In der 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 wird vergleicht zwei Sequenzen, die nicht gleich sind. Beachten Sie, dass die Sequenzen identische Daten enthalten, aber da die Objekte, die sie enthalten andere Verweise verfügen, die Sequenzen nicht als gleich betrachtet.

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 implementieren die IEqualityComparer<T> generische Schnittstelle in Ihrer Klasse. Im folgenden Codebeispiel wird veranschaulicht, wie implementieren diese Schnittstelle in einer Hilfsklasse und GetHashCode und Equals Methoden.

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 implementieren, können Sie Sequenzen von ProductA Objekte in die SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) Methode, 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
*/

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 3.5
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: