2012-04-09 46 views
1

背景:我有一個DirectoryCollection<T>類型的泛型集合,並且指定T必須是IEntity類型。我有一個具體的類型Entity,它實現了IEntity和兩個派生類型,EmployeeStation將繼承對象的集合傳遞給方法接受基類對象的ICollection

在.NET 4.0中,我知道這是可能的(from here)調用方法與IEnumerable<Entity>參數爲DirectoryCollection<Employee>,但是,它似乎並不與ICollection<Entity>類型的參數的方法工作。在所述方法中,我使用集合的方法RemoveAdd,因此,我們猶豫將IEnumerable放入方法簽名中。

解決此問題的最佳做法是什麼?

+0

'DirectoryCollection'是否實現'ICollection'?我猜不是? – 2012-04-09 14:35:11

+0

@ChrisShain不是'ICollection',但它確實實施了'ICollection 其中T:IEntity' – 2012-04-09 14:44:19

+0

@MichaelKingsmill並且你不能讓它'ICollection 其中T:IEntity',大概是T是一個輸入和輸出類型。 。? – 2012-04-09 14:48:03

回答

0

您需要在DirectoryCollection類中實現ICollection。由於@SamHolder在評論中提到的協變限制,您可能需要明確實施它。有關明確實現接口,請參見this tutorial

此外,在接受ICollection<Entity>作爲參數的方法中,您可能需要將簽名更改爲接受ICollection<IEntity>

+0

我的問題原來與泛型集合無關,但您建議的步驟足以讓泛型集合傳遞給方法。謝謝! – 2012-04-09 16:28:48