Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método Enumerable.SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)

 

Publicado: octubre de 2016

Determina si dos secuencias son iguales al comparar los elementos mediante el comparador de igualdad predeterminado para su tipo.

Espacio de nombres:   System.Linq
Ensamblado:  System.Core (en System.Core.dll)

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

Parámetros

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

Un IEnumerable<T> para comparar con second.

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

Un IEnumerable<T> para comparar con la primera secuencia.

Valor devuelto

Type: System.Boolean

true Si las dos secuencias de origen son de la misma longitud y sus elementos correspondientes son iguales según el comparador de igualdad predeterminado para su tipo; de lo contrario, false.

Parámetros de tipo

TSource

Tipo de los elementos de las secuencias de entrada.

Exception Condition
ArgumentNullException

El valor de first o second es null.

El SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) método enumera las dos secuencias de origen en paralelo y compara los elementos correspondientes mediante el comparador de igualdad predeterminado para TSource, Default. El comparador de igualdad predeterminado, Default, se utiliza para comparar los valores de los tipos que implementan la IEqualityComparer<T> interfaz genérica. Para comparar un tipo de datos personalizado, debe implementar esta interfaz y proporcionar sus propios GetHashCode y Equals métodos para el tipo.

Ejemplos de código siguientes muestran cómo usar SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) para determinar si dos secuencias son iguales. En los dos primeros ejemplos, el método determina si las secuencias comparadas contienen referencias a los mismos objetos. En los ejemplos terceros y cuarto, el método compara los datos reales de los objetos dentro de las secuencias.

En este ejemplo las secuencias son iguales.

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

En el ejemplo de código siguiente se compara dos secuencias que no son iguales. Tenga en cuenta que las secuencias contienen datos idénticos, pero porque los objetos que contienen tienen las referencias diferentes, las secuencias no se consideran iguales.

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 desea comparar los datos reales de los objetos de las secuencias en lugar de solo comparar sus referencias, que tiene que implementar el IEqualityComparer<T> interfaz genérica en la clase. En el ejemplo de código siguiente se muestra cómo implementar esta interfaz en una clase auxiliar y proporcionar GetHashCode y Equals métodos.

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

Después de implementar esta interfaz, puede utilizar secuencias de ProductA los objetos de la SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) método, tal como se muestra en el ejemplo siguiente.


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

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 3.5
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: