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

My own class (List<int>) does not like to intersect. WHY?

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

我有的是:

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

我尝试做的是

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

myList list3 = list1.Intersect(list2);

这行不通。 编译器抱怨类似 "Error 1 Typ "System.Collections.Generic.IEnumerable" 无法隐式转换为 "myList"."

我不明白这里发生了什么类型的混淆:( 我已经在我的 Intersect-example 中尝试了一些转换,但它没有用。

任何人都可以向我解释这里的问题是什么,我做错了什么吗?

谢谢!

Intersect 扩展方法不会尝试 return 与输入相同类型的集合(例如 List<int>)。它只是 return 一个序列实现 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);

(或者,如果您的 class 提供了一个接受 IEnumerable<int> 参数的构造函数,那也可以。)