本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

Enumerable.SequenceEqual<TSource> 方法 (IEnumerable<TSource>, IEnumerable<TSource>)

 

确定两个序列是否相等的元素进行比较通过使用相应类型的默认相等比较器。

命名空间:   System.Linq
程序集:  System.Core(位于 System.Core.dll)

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

参数

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

IEnumerable<T> 要与 second

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

IEnumerable<T> 要与第一个序列进行比较。

返回值

Type: System.Boolean

true 如果两个源序列的长度相等,且其相应元素相等根据它们的类型; 的默认相等比较器否则为 false

类型参数

TSource

输入序列中的元素的类型。

Exception Condition
ArgumentNullException

firstsecondnull

SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) 方法枚举中并行的两个源序列并使用的默认相等比较器比较的相应元素 TSource, ,Default 默认的相等比较, Default, ,用于比较的类型的实现值 IEqualityComparer<T> 泛型接口。 若要比较自定义数据类型,您需要实现此接口,并提供您自己 GetHashCodeEquals 类型的方法。

下面的代码示例演示如何使用 SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) 以确定两个序列是否相等。 在前两个示例中,该方法确定比较的序列是否包含对同一对象的引用。 在第三个和第四个示例中,该方法将序列内对象的实际数据进行比较。

在此示例中序列相等。

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

下面的代码示例比较不相等的两个序列。 请注意,序列包含相同的数据,但它们所包含的对象具有不同的引用,因为序列被视为不相等。

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

如果您想要比较而不是只比较它们的引用的序列中的对象的实际数据,您必须实现 IEqualityComparer<T> 在您的类的泛型接口。 下面的代码示例演示如何在一个帮助器类中实现此接口,并提供 GetHashCodeEquals 方法。

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

实现此接口后,您可以使用的序列 ProductA 中的对象 SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) 方法,如下面的示例中所示。


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

通用 Windows 平台
自 8 起可用
.NET Framework
自 3.5 起可用
可移植类库
可移植 .NET 平台 中受支持
Silverlight
自 2.0 起可用
Windows Phone Silverlight
自 7.0 起可用
Windows Phone
自 8.1 起可用
返回页首
显示: