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是一个输入和输出类型…?@SamHolderICollection
是一个框架接口;无法更改类型参数上的方差表示法。我的问题与泛型集合无关,但您建议的步骤足以将泛型集合传递给方法。谢谢