Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 将继承对象的集合传递给接受基础对象ICollection的方法_Generics_C# 4.0_Icollection_Generic Collections - Fatal编程技术网

Generics 将继承对象的集合传递给接受基础对象ICollection的方法

Generics 将继承对象的集合传递给接受基础对象ICollection的方法,generics,c#-4.0,icollection,generic-collections,Generics,C# 4.0,Icollection,Generic Collections,背景:我有一个DirectoryCollection类型的泛型集合,并指定T必须是IEntity类型。我有一个具体类型实体,它实现了IEntity,还有两个派生类型,Employee和Station 在.NET 4.0中,我知道可以()将带有IEnumerable参数的方法调用为DirectoryCollection,但是,对于带有ICollection类型参数的方法,这似乎不起作用。在所述方法中,我使用集合的Remove和Add方法,因此,我不愿将IEnumerable放入方法签名中 解决此问

背景:我有一个
DirectoryCollection
类型的泛型集合,并指定T必须是
IEntity
类型。我有一个具体类型
实体
,它实现了
IEntity
,还有两个派生类型,
Employee
Station

在.NET 4.0中,我知道可以()将带有
IEnumerable
参数的方法调用为
DirectoryCollection
,但是,对于带有
ICollection
类型参数的方法,这似乎不起作用。在所述方法中,我使用集合的
Remove
Add
方法,因此,我不愿将
IEnumerable
放入方法签名中


解决此问题的最佳做法是什么?

您需要在
DirectoryCollection
类中实现
ICollection
。由于@SamHolder在注释中提到的协方差限制,您可能需要显式地实现它。请参见关于显式实现接口的说明


此外,在接受
ICollection
作为参数的方法中,您可能需要将签名改为接受
ICollection

DirectoryCollection是否实现
ICollection
?我猜不是吗?@ChrisShain不是
ICollection
,但它确实实现了
ICollection,其中T:IEntity
@MichaelKingsmill,你不能使它成为
ICollection,其中T:IEntity
,大概是因为T是一个输入和输出类型…?@SamHolder
ICollection
是一个框架接口;无法更改类型参数上的方差表示法。我的问题与泛型集合无关,但您建议的步骤足以将泛型集合传递给方法。谢谢