返回实现接口的所有通用列表对象
问题描述:
我试图返回实现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>();
}
}
答
你还需要改变你的返回类型相匹配
答
FarmAnimals.Where(x => x is IHerd)
答
return Animals.OfType<IHerd>().OfType<Animals>()
你不需要`Cast`。 – Gabe 2011-01-12 19:46:21
是的,因为“IHerd”和“Animals”仅在它们有时在同一个类中实现时相关,因此不能隐含地将“List”作为“List ”,因为IHerd可以实现不从动物派生的类。如果不是IHerd,实现了派生类HerdAnimal,如果您使用的Framework v4.0使List协变,您可以避免强制转换。 –
KeithS
2011-01-12 20:10:17