Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Enumerable.SequenceEqual<TSource> méthode (IEnumerable<TSource>, IEnumerable<TSource>)

 

Date de publication : novembre 2016

Détermine si deux séquences sont égales en comparant les éléments à l’aide du comparateur d’égalité par défaut pour ce type.

Espace de noms:   System.Linq
Assembly:  System.Core (dans System.Core.dll)

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

Paramètres

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

Un IEnumerable<T> à comparer à second.

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

Un IEnumerable<T> à comparer à la première séquence.

Valeur de retour

Type: System.Boolean

true Si les deux séquences source sont de longueur égale et que leurs éléments correspondants sont égaux selon le comparateur d’égalité par défaut pour son type. dans le cas contraire, false.

Paramètres de type

TSource

Type des éléments des séquences d'entrée.

Exception Condition
ArgumentNullException

first ou second a la valeur null.

Le SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) méthode énumère les deux séquences source en parallèle et compare les éléments correspondants à l’aide du comparateur d’égalité par défaut pour TSource, Default. Le comparateur d’égalité par défaut, Default, est utilisé pour comparer les valeurs des types qui implémentent la IEqualityComparer<T> interface générique. Pour comparer un type de données personnalisé, vous devez implémenter cette interface et fournir vos propres GetHashCode et Equals méthodes pour le type.

Les exemples de code suivants montrent comment utiliser SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) pour déterminer si deux séquences sont égales. Dans les deux premiers exemples, la méthode détermine si les séquences comparées contiennent des références aux mêmes objets. Dans les troisièmes et quatrième exemples, la méthode compare les données réelles des objets dans les séquences.

Dans cet exemple, les séquences sont égales.

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

L’exemple de code suivant compare deux séquences qui ne sont pas égales. Notez que les séquences contiennent des données identiques, mais étant donné que les objets qu’ils contiennent ont des références différentes, les séquences ne sont pas considérées comme égales.

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

Si vous souhaitez comparer les données réelles des objets dans les séquences au lieu de comparer juste leurs références, vous devez implémenter le IEqualityComparer<T> interface générique dans votre classe. L’exemple de code suivant montre comment implémenter cette interface dans une classe d’assistance et fournir GetHashCode et Equals méthodes.

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

Après avoir implémenté cette interface, vous pouvez utiliser des séquences de ProductA des objets dans le SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) méthode, comme indiqué dans l’exemple suivant.


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

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 3.5
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: