此主题尚未评级 - 评价此主题

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

2013/12/13

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

Namespace:  System.Linq
程序集:  System.Core(位于 System.Core.dll 中)
public static bool SequenceEqual<TSource>(
	this IEnumerable<TSource> first,
	IEnumerable<TSource> second
)

类型参数

TSource

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

参数

first
类型: System.Collections.Generic.IEnumerable<TSource>
一个用于比较 secondIEnumerable<T>
second
类型: System.Collections.Generic.IEnumerable<TSource>
一个 IEnumerable<T>,用于与第一个序列进行比较。

返回值

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

用法说明

在 Visual Basic 和 C# 中,您可以对类型为 IEnumerable<TSource> 的任何对象调用此方法作为实例方法。使用实例方法语法来调用此方法时,忽略第一个参数。
异常条件
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);

         outputBlock.Text += String.Format(
             "The lists {0} equal.",
             equal ? "are" : "are not") + "\n";
      }

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

         outputBlock.Text += String.Format("The lists {0} equal.", equal ? "are" : "are not") + "\n";
      }

      /*
       This code produces the following output:

       The lists are not equal.
      */



如果要比较实际的数据,而不是只比较它们的引用序列中的对象,则必须在您的类中实现 IEqualityComparer<T> 泛型接口。

Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

本文是否对您有所帮助?
(1500 个剩余字符)
感谢您的反馈
显示:
© 2014 Microsoft. 版权所有。