2014-03-05 43 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是草食動物選擇一個' –