从基集合获取对象的专用集合

本文关键字:集合 专用 取对象 获取 | 更新日期: 2023-09-27 18:10:28

假设我在c#中有一个动物集合,其中包括狗,猫等…我如何获得基本集合中的所有犬项,以便我可以对所有犬项执行其他操作,就像它们在自己的单独集合中一样,就像它们在List<Dog>中一样(并且使对象也在基本集合中更新)?

对于代码答案,假设List<Animals>是足够的,因为我希望尽可能避免实现我自己的泛型集合。

编辑:我刚刚注意到这个问题非常类似于c#集合继承

从基集合获取对象的专用集合

关于其他海报,使用OfType,你可以这样做;

List<Dog> dogList = new List<Dog>();
foreach(Animal a in animals.OfType<Dog>())
    {
      //Do stuff with your dogs here, for example;
      dogList.Add(a);
    }

现在你已经把你所有的狗放在一个单独的列表中,或者你想对它们做什么。这些狗也仍然存在于你的基本集合中。

只需在基类中声明一个基方法,如

public class Base {
    List<Animals> animals = .... 
    ...
    ....
    public IEnumerable<T> GetChildrenOfType<T>()  
        where T : Animals
    {
       return animals.OfType<T>();  // using System.Linq;
    }
}

差不多。您应该自然地更改它以满足您的确切需求。

List<Dog> dogList = new List<Dog>();
foreach(Animal a in animals) { //animals is your animal list
   if(a.GetType() == typeof(Dog)) { //check if the current Animal (a) is a dog
      dogList.Add(a as Dog); //add the dog to the dogList
   }
}