从基本集合中获取特定的对象集合

时间:2013-04-22 08:12:38

标签: c# collections

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

对于代码答案,假设List<Animals>足够,我希望尽可能避免implementing my own generic collection

编辑:我刚刚注意到这个问题与c# collection inheritance

非常相似

3 个答案:

答案 0 :(得分: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);
    }

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

答案 1 :(得分:1)

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

public class Base {

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

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

这样的事情。您应该自然地改变它以满足您的确切需求。

答案 2 :(得分: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
   }
}