C# 通用父集合拆分为子集合

C# 通用父集合拆分为子集合,c#,list,.net-3.5,ienumerable,C#,List,.net 3.5,Ienumerable,我有一个IAnimal的列表 List<IAnimal> Animals 列出动物 在此列表中,我有3种不同的动物 List<IAnimal> Animals Cat5个对象 Dog10个对象 Cow3个对象 如何生成子动物类型的3个不同列表 结果应该是 列出猫包含5个对象 列出狗包含10个对象 列表奶牛包含3个对象 我不介意使用不同的收集类型,然后ListIEnumerable或任何其他?LINQ使这一点变得简单: var cats = animals.OfTyp

我有一个IAnimal的列表

List<IAnimal> Animals
列出动物
在此列表中,我有3种不同的
动物

List<IAnimal> Animals
  • Cat
    5个对象
  • Dog
    10个对象
  • Cow
    3个对象
  • 如何生成子
    动物
    类型的3个不同列表

    结果应该是

  • 列出猫
    包含5个对象
  • 列出狗
    包含10个对象
  • 列表奶牛
    包含3个对象

  • 我不介意使用不同的收集类型,然后
    List
    <代码>IEnumerable
    或任何其他?

    LINQ使这一点变得简单:

    var cats = animals.OfType<Cat>().ToList();
    var dogs = animals.OfType<Dog>().ToList();
    var cows = animals.OfType<Cow>().ToList();
    
    var cats=animals.OfType().ToList();
    var dogs=动物。of type().ToList();
    var cows=动物。OfType().ToList();
    
    使用
    foreach
    LINQ
    遍历列表,并检查类型:

     foreach(IAnimal animal in Animals){
      if(animal is Cat)
         Cats.Append(animal);
     //do the same with dogs and cows
     }
    
    用它怎么样

    根据指定类型筛选IEnumerable的元素

    返回值
    类型:System.Collections.Generic.IEnumerable
    一个IEnumerable,包含TResult类型输入序列中的元素。
    

    var cat=animals.OfType().ToList();
    var cow=动物。OfType().ToList();
    var dog=animals.OfType().ToList();
    
    注意,您必须强制转换,方法是
    Add
    ,而不是
    Append
    var cat = animals.OfType<Cat>().ToList();
    var cow = animals.OfType<Cow>().ToList();
    var dog = animals.OfType<Dog>().ToList();