我自己的类(List <int>)不喜欢交叉。为什么?

时间:2016-06-04 14:47:54

标签: c# types intersect

我有一个派生自List的类。 我无法在我的类的实例上使用intersect()。 为什么呢?

我拥有的是:

class myList : List<int>
{ ... }

我尝试做的是

myList list1 = new some initialization...
myList list2 = new some initialization...

myList list3 = list1.Intersect(list2);

这不起作用。 编译器抱怨类似的东西 &#34;错误1 Typ&#34; System.Collections.Generic.IEnumerable&#34;无法隐式转换为&#34; myList&#34;。&#34;

我不明白这里有什么类型的混乱:( 我已经在我的Intersect示例中尝试了一些演员,但它没有用。

有谁能请解释我这里的问题是什么,以及我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:8)

Intersect扩展方法不会尝试返回与输入相同类型的集合(例如List<int>)。它只返回一个为适当的IEnumerable<T>实现T的序列。所以在你的情况下你可以使用:

myList list1 = new some initialization...
myList list2 = new some initialization...

IEnumerable<int> list3 = list1.Intersect(list2);

如果您想要使用该内容创建myList,则需要执行以下操作:

myList list4 = new myList();
list4.AddRange(list3);

(或者,如果您的类提供了一个接受IEnumerable<int>参数的构造函数,那么它也会起作用。)