如何将List <Bear>或List <Goat>分配给List <IAnimal>

Gre*_*Gum 2 c# linq

我有一个接口(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?


    }
}
Run Code Online (Sandbox Code Playgroud)

如果我将CouldBeBearsOrGoats更改为List,那么我可以删除项目,但我不能再分配任何一种类型.

public static List<IAnimal> CouldBeBearsOrGoats { get; set; } 
Run Code Online (Sandbox Code Playgroud)

该列表将会很长,所以我不想只是复制一份列表并使用副本.我正在做的是处理列表中的每个项目,然后将其删除,直到列表为空.

dma*_*may 5

由于您的源数据无论如何都是IEnumerable,您必须将其转换为List才能添加/删除元素.

    List<IAnimal> ListOfAnimals1 = bears.Cast<IAnimal>().ToList();
    List<IAnimal> ListOfAnimals2 = goats.Cast<IAnimal>().ToList();
Run Code Online (Sandbox Code Playgroud)