我自己的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>
参数的构造函数,那也可以。)
我有一个派生自 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>
参数的构造函数,那也可以。)