信息
您所需的主题如下所示。但此主题未包含在此库中。

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

2013/12/13

通过使用默认的相等比较器对值进行比较生成两个序列的交集。

Namespace:  System.Linq
程序集:  System.Core(位于 System.Core.dll 中)

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

类型参数

TSource

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

参数

first
类型: System.Collections.Generic.IEnumerable<TSource>
一个 IEnumerable<T>,将返回其也出现在 second 中的非重复元素。
second
类型: System.Collections.Generic.IEnumerable<TSource>
一个 IEnumerable<T>,将返回其也出现在第一个序列中的非重复元素。

返回值

类型: System.Collections.Generic.IEnumerable<TSource>
包含组成两个序列交集的元素的序列。

用法说明

在 Visual Basic 和 C# 中,您可以对类型为 IEnumerable<TSource> 的任何对象调用此方法作为实例方法。使用实例方法语法来调用此方法时,忽略第一个参数。

异常条件
ArgumentNullException

firstsecondnull

此方法通过使用延迟执行实现。 即时返回值为一个对象,该对象存储执行操作所需的所有信息。 只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach(或 Visual Basic 中的 For Each)来枚举该对象时,才执行此方法表示的查询。

集 A 和集 B 的交集定义为包含同时出现在 A 和 B 中的所有元素的集,但不包含任何其他元素。

当枚举此方法返回的对象时,Intersect 将枚举 first,以收集该序列中的所有非重复元素。 然后,枚举 second,从而标记那些同时出现在两个序列中的元素。 最后,按收集顺序生成标记的元素。

默认相等比较器 Default 用于比较实现了 IEqualityComparer<T> 泛型接口的类型的值。 若要比较自定义类型,需要为该类型实现此接口并提供自己的 GetHashCodeEquals 方法。

下面的代码示例演示如何使用 Intersect<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) 返回同时出现在两个整数序列中的元素。


      int[] id1 = { 44, 26, 92, 30, 71, 38 };
      int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };

      IEnumerable<int> both = id1.Intersect(id2);

      foreach (int id in both)
         outputBlock.Text += id + "\n";

      /*
       This code produces the following output:

       26
       30
      */



如果希望比较自定义数据类型的对象的序列,则必须在类中实现 IEqualityComparer<T> 泛型接口。

Windows Phone OS

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

Windows Phone

显示: