C# 使用linq过滤可观察的集合
我有一门动物课。一个C# 使用linq过滤可观察的集合,c#,linq,C#,Linq,我有一门动物课。一个食草动物类继承自动物,一个大象类继承自食草动物。我还有一个肉食动物类继承自动物,还有一个老虎类继承自肉食动物。我有一个可以观察到的收藏,叫做动物园,里面有老虎和大象。我想挑选动物园收藏中的食草动物。然后我想把食草动物添加到一个新的可观察的集合中,称为herb var herbivores = from Animal in zoo where Animal == Animal.OfType<Herbivore>()
食草动物
类继承自动物,一个大象
类继承自食草动物
。我还有一个肉食动物
类继承自动物
,还有一个老虎
类继承自肉食动物
。我有一个可以观察到的收藏,叫做动物园,里面有老虎和大象。我想挑选动物园收藏中的食草动物。然后我想把食草动物添加到一个新的可观察的集合中,称为herb
var herbivores = from Animal in zoo
where Animal == Animal.OfType<Herbivore>()
select Animal;
foreach (var item in herbivores)
{
herb.Add(item);
}
var herbivores=来自动物园的动物
其中,Animal==Animal.OfType()
选择动物;
foreach(草食动物的var项目)
{
添加(项目);
}
你不能用那种类型的;它是可枚举集合上的扩展方法,而不是类animal
。改为这样做:
var herbivores = zoo.OfType<Herbivore>();
但是,用这种时髦的方式做这件事是没有意义的。你在这里没有问任何问题。很抱歉,它会出错。我哪里做错了?你需要解释你的错误是什么,它们在哪里。只说“它在犯错误”是没有帮助的。您需要详细描述您尝试的解决方案中存在的问题。此外,之后没有理由进行for
-循环。我不知道herb
是从哪里来的,但是你可以将herbivors
传递到构造函数中,如果要保留现有数据,请使用AddRange
。OfType和Where..之间的区别在于,在第一种情况下,食草动物将是IEnumerable
,而第二种将是IEnumerable
。如果您更喜欢LINQ语法(并且希望类型保持为animal),还可以将第二个表达式表示为,它来自一个动物园中的一个食草动物
var herbivores = zoo.Where(a => a is Herbivore);