SequenceEqual(TSource) Metodo (IEnumerable(TSource), IEnumerable(TSource))
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Metodo Enumerable.SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)

 

Determina se due sequenze sono uguali confrontando gli elementi tramite l’uso dell'operatore di confronto di uguaglianza predefinito per il loro tipo.

Spazio dei nomi:   System.Linq
Assembly:  System.Core (in System.Core.dll)

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

Parametri

first

Oggetto IEnumerable<T> da confrontare a second.

second

Oggetto IEnumerable<T> da confrontare alla prima sequenza.

Valore restituito

Type: System.Boolean

true se le due sequenze di origine sono di lunghezza uguale e gli elementi corrispondenti risultano uguali secondo l’operatore di confronto uguaglianze per il loro tipo; in caso contrario, false.

Parametri di tipo

TSource

Tipo degli elementi delle sequenze di input.

Exception Condition
ArgumentNullException

first o second è null.

Il metodo SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) enumera le due sequenze di origine in parallelo e confronta gli elementi corrispondenti utilizzando l'operatore di confronto uguaglianze predefinito per TSource, Default.L'operatore di confronto di uguaglianza predefinito Default viene utilizzato per confrontare valori dei tipi che implementano l'interfaccia generica IEqualityComparer<T>.Per confrontare un tipo di dati personalizzato, è necessario implementare questa interfaccia e specificare i propri metodi GetHashCode e Equals per il tipo.

Negli esempi di codice riportati di seguito viene illustrato come utilizzare l'oggetto SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) per determinare se due sequenze sono uguali.Nei primi due esempi, il metodo determina se le sequenze confrontate contengano riferimenti agli stessi oggetti.Nel terzo e nel quarto esempio, il metodo confronta i dati effettivi degli oggetti all'interno delle sequenze.

In questo esempio le sequenze sono uguali.

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

Nell'esempio di codice riportato di seguito vengono messe a confronto due sequenze non uguali.Si noti che le sequenze contengono dati identici, ma poiché gli oggetti che contengono dispongono di riferimenti diversi, le sequenze non sono considerate uguali.

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

Per confrontare i dati effettivi degli oggetti nelle sequenze anziché confrontare solo i loro riferimenti, è necessario implementare l'interfaccia generica IEqualityComparer<T> nella propria classe.Nell'esempio di codice seguente viene illustrato come implementare questa interfaccia in una classe di aiuto personalizzato e come specificare i metodi GetHashCode e Equals.

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

Dopo avere implementato questa interfaccia, è possibile utilizzare sequenze di oggetti ProductA nel metodo SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>), come illustrato nell'esempio seguente.


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

Universal Windows Platform
Disponibile da 4.5
.NET Framework
Disponibile da 3.5
Portable Class Library
Supportato in: portable .NET platforms
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra:
© 2016 Microsoft