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

时间:2012-04-09 14:01:03

标签: generics c#-4.0 icollection generic-collections

背景:我有一个DirectoryCollection<T>类型的泛型集合,并指定T必须是IEntity类型。我有一个具体类型Entity,它实现IEntity和两个派生类型,EmployeeStation

在.NET 4.0中,我知道可以(from here)调用IEnumerable<Entity>参数作为DirectoryCollection<Employee>的方法,但是,似乎这对方法不起作用参数类型为ICollection<Entity>。在所述方法中,我使用集合的RemoveAdd方法,因此,犹豫是否将IEnumerable放入方法签名中。

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

1 个答案:

答案 0 :(得分:0)

您需要在ICollection课程中实施DirectoryCollection。由于@SamHolder在评论中提到的协方差限制,您可能需要明确地实现它。有关明确实现接口的信息,请参阅this tutorial

此外,在接受ICollection<Entity>作为参数的方法中,您可能需要更改签名以接受ICollection<IEntity>