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>, IEqualityComparer<TSource>)

 

Date de publication : novembre 2016

Détermine si deux séquences sont égales en comparant leurs éléments en utilisant un IEqualityComparer<T>.

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

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

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.

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

Un IEqualityComparer<T> à utiliser pour comparer les éléments.

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 comparer; Sinon, 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>, IEqualityComparer<TSource>) méthode énumère les deux séquences source en parallèle et compare les éléments correspondants à l’aide de l’élément spécifié IEqualityComparer<T>. Siomparer est null, le comparateur d’égalité par défaut, Default, est utilisé pour comparer les éléments.

L’exemple suivant montre comment implémenter un comparateur d’égalité qui peut être utilisé dans le SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>) (méthode).

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

}

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


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

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: