C# 我自己的类(List<;int>;)不喜欢相交。为什么?
我有一个从列表派生的类。 我无法在类的实例上使用intersect()。 为什么? 我得到的是:C# 我自己的类(List<;int>;)不喜欢相交。为什么?,c#,types,intersect,C#,Types,Intersect,我有一个从列表派生的类。 我无法在类的实例上使用intersect()。 为什么? 我得到的是: class myList : List<int> { ... } 这不管用。 编译器抱怨类似于 错误1类型“System.Collections.Generic.IEnumerable”无法隐式转换为“myList” 我不明白这里发生了什么类型的类型混淆:( 我已经在我的Intersect示例中尝试了一些强制转换,但没有成功 谁能解释一下这里的问题是什么,我做错了什么 谢谢!扩展方法不
class myList : List<int>
{ ... }
这不管用。
编译器抱怨类似于
错误1类型“System.Collections.Generic.IEnumerable”无法隐式转换为“myList”
我不明白这里发生了什么类型的类型混淆:(
我已经在我的Intersect示例中尝试了一些强制转换,但没有成功
谁能解释一下这里的问题是什么,我做错了什么
谢谢!扩展方法不会尝试返回与输入类型相同的集合(例如列表
)。它只会返回一个实现IEnumerable
的序列,以获得适当的t
。因此在您的情况下,您可以使用:
myList list1 = new some initialization...
myList list2 = new some initialization...
IEnumerable<int> list3 = list1.Intersect(list2);
(或者,如果您的类提供了一个接受
IEnumerable
参数的构造函数,那么这也会起作用。)作为旁白,我强烈建议您遵循.NET命名约定-这样您的类将被称为MyList
,而不是MyList
,尽管这是一个糟糕的名称,因为它根本无法描述其用途。您确定首先需要扩展列表吗?与u唱歌作曲。非常感谢你这个非常酷的答案。1.现在一切正常。2.我现在完全理解了我的问题!非常感谢!
myList list1 = new some initialization...
myList list2 = new some initialization...
IEnumerable<int> list3 = list1.Intersect(list2);
myList list4 = new myList();
list4.AddRange(list3);