Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

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

Determina si dos secuencias son iguales; para ello, se comparan sus 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 de tipo

TSource

Tipo de los elementos de las secuencias de entrada.

Parámetros

first
Tipo: System.Collections.Generic.IEnumerable<TSource>
IEnumerable<T> que se va a comparar con second.
second
Tipo: System.Collections.Generic.IEnumerable<TSource>
IEnumerable<T> que se va a comparar con la primera secuencia.

Valor devuelto

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

Nota sobre el uso

En Visual Basic y C#, se puede llamar a este método como a un método de instancia en cualquier objeto de tipo IEnumerable<TSource>. Cuando emplee la sintaxis del método de instancia para llamar a este método, omita el primer parámetro. Para obtener más información, vea Métodos de extensión (Visual Basic) o Métodos de extensión (Guía de programación de C#).

ExcepciónCondición
ArgumentNullException

first o second es null.

El método SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) 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 usa para comparar valores de los tipos que implementan la interfaz genérica IEqualityComparer<T>. Para comparar un tipo de datos personalizado, necesita implementar esta interfaz y proporcionar sus propios métodos GetHashCode y Equals para el tipo.

En los ejemplos de código siguientes se muestra cómo se utiliza SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) para determinar si dos secuencias son iguales. En los primeros dos ejemplos, el método determina si las secuencias comparadas contienen las referencias a los mismos objetos. En los ejemplos tercero y cuarto, el método compara los datos reales de los objetos 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 comparan dos secuencias que no son iguales. Observe que las secuencias contienen los datos idénticos, pero porque los objetos que contienen tienen las referencias diferentes, las secuencias no están consideradas 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 vez de solo comparar sus referencias, tiene que implementar la interfaz genérica IEqualityComparer<T> en su clase. El ejemplo de código siguiente muestra cómo implementar esta interfaz en una clase auxiliar y proporcionar GetHashCode y los métodos de 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;
    }
}


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



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



.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

.NET para aplicaciones de Windows Phone

Compatible con: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft