我有一个接口 ( IAnimal
),它由 Bear 和 Goat 这两个类实现。
在运行时,我可能会得到一个熊或山羊列表,但无论它们是什么,都需要分配给属性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; }
这份清单会很长,所以我不想只复制一份清单并使用一份副本。我正在做的是处理列表中的每个项目,然后将其删除,直到列表为空。