0

假设我在 c# 中有一个动物集合,其中包含狗、猫等……我怎样才能获得基础集合中的所有狗项目,这样我就可以对所有狗项目执行其他操作,就好像它们在它们的拥有单独的集合,就好像它们在一个List<Dog>(并且对象也在基础集合中更新)?

对于代码答案,假设List<Animals>就足够了,因为我想尽可能避免实现自己的通用集合

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

4

3 回答 3

2

关于其他海报,使用 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);
    }

现在你已经把你所有的狗都放在了一个单独的列表中,或者你想对它们做什么。这些狗也将仍然存在于您的基础收藏中。

于 2013-04-22T08:29:43.057 回答
1

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

public class Base {

    List<Animals> animals = .... 
    ...
    ....

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

类似的东西。您应该自然地更改它以适应您的确切需求。

于 2013-04-22T08:18:20.990 回答
0
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
   }
}
于 2013-04-22T08:18:39.387 回答