2014-03-05 109 views
-1

我有一个动物类。 A herbivore继承自动物的类以及从herbivore继承的elephant类。我也有一个carnivore类继承animaltiger类继承自carnivore。我有一个可观察的集合,叫老虎和大象动物园。我想选择动物园系列中的草食动物。然后,我想将草食动物添加到一个名为herb的新可观察集合中。使用linq过滤可观察的集合

var herbivores = from Animal in zoo 
       where Animal == Animal.OfType<Herbivore>() 
       select Animal; 

foreach (var item in herbivores) 
{ 
    herb.Add(item); 
}       
+0

您还没有在这里提问。 – Servy

+0

对不起,它给我的错误,我哪里出错 –

+0

你需要解释你的错误是什么,他们在哪里。没有什么比“它给错误”没有帮助。您需要详细说明您尝试解决方案*时遇到的问题。 – Servy

回答

3

您不能使用OfType那样的;它是可枚举集合的扩展方法,而不是类animal。做到这一点,而不是:

var herbivores = zoo.OfType<Herbivore>(); 

或者,也可以达到同样的效果与

var herbivores = zoo.Where(a => a is Herbivore); 

,但真的有这个做时髦的方式是没有意义的。

+0

另外,之后没有for循环的理由。我不知道'herb'是从哪里来的,但是你可以将'herbivores'传递给构造函数,或者如果你想保留现有的数据,可以使用'AddRange'。 – CompuChip

+0

OfType和Where..is之间的区别在于,在第一种情况下草食动物将是'IEnumerable ',而第二个将是'IEnumerable '。如果您更喜欢LINQ语法(并且希望类型保持动物),您还可以将第二个表示为“从动物园中,其中a是草食动物选择一个' –