我有一個接口(IAnimal
),它由兩個類Bear和Goat實現。如何將List <Bear>或List <Goat>分配到列表<IAnimal>
在運行時,我可能最終會與熊,或山羊的名單,但無論是他們需要被分配到財產IEnumerable<IAnimal>
這工作,爲IEnumerable
共同變種。
不過,我現在需要從IEnumerable<IAnimal>
這當然行不通刪除項目。
什麼我需要做的,能夠刪除的項目?
這裏是工作示例:
interface IAnimal {}
public class Bear : IAnimal {}
public class Goat : IAnimal {}
class Program
{
public static IEnumerable<IAnimal> CouldBeBearsOrGoats { get; set; }
static void Main(string[] args) {
var list = new List<int>() {1, 2, 3};
var bears = from l in list select new Bear();
var goats = from l in list select new Goat();
CouldBeBearsOrGoats = bears;
CouldBeBearsOrGoats = goats;
//How do I now remove an item?
}
}
如果我改變CouldBeBearsOrGoats到列表,然後我就可以刪除項目,但我不能再分配任一類型。
public static List<IAnimal> CouldBeBearsOrGoats { get; set; }
該列表將會很長,所以我不想僅複製列表並使用副本。我正在做的是處理列表中的每個項目,然後刪除它,直到列表爲空。
@TimSchmelter,一個'列表'不是'ICollection的',所以它不會解決任何問題 –
通過提供'名單',你允許用戶在山羊添加到熊的列表,這可能在您的系統中無效。如果你只想允許刪除,也許你應該提供類似'IEnumerable Animals {get {return _animals.AsReadOnly(); }}'和'void RemoveAnimal(IAnimal animal){_animals.Remove(animal); }'。 –
nmclean