返回实现接口的所有通用列表对象

问题描述:

我试图返回实现IHerd的所有动物对象。返回实现接口的所有通用列表对象

有人能指点我吗?

public interface IHerd { 
     void Herd(); 
    } 

    public class Dog : Animals, IHerd { 
     public void Herd() { 
      // Swim method 
     } 
    } 

    public class Animals { 
     public void Eat() { } 
     public void Poop() { } 
    } 

    public class Farm { 
     public List<Animals> FarmAnimals = new List<Animals>(); 

     public Animals GetHerders() { 
      return FarmAnimals.OfType<IHerd>(); 
     } 
    } 

​​

你还需要改变你的返回类型相匹配

+0

你不需要`Cast`。 – Gabe 2011-01-12 19:46:21

+0

是的,因为“IHerd”和“Animals”仅在它们有时在同一个类中实现时相关,因此不能隐含地将“List ”作为“List ”,因为IHerd可以实现不从动物派生的类。如果不是IHerd,实现了派生类HerdAnimal,如果您使用的Framework v4.0使List协变,您可以避免强制转换。 – KeithS 2011-01-12 20:10:17

FarmAnimals.Where(x => x is IHerd) 

return Animals.OfType<IHerd>().OfType<Animals>()