我有一个派生自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示例中尝试了一些演员,但它没有用。
有谁能请解释我这里的问题是什么,以及我做错了什么?
谢谢!
答案 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>
参数的构造函数,那么它也会起作用。)