2011-04-26 68 views
2

假設「Apple」,「Banana」和「Orange」類都從「Fruit」繼承。在c#中,是否有可能遍歷相同基類型的多個集合?

現在假設我們有成員變量列表 -

List<Apple> mApples; 

List<Banana> mBananas; 

List<Orange> mOranges; 

就能形成一個循環,做了等同於以下?

foreach(Fruit fruit in mApples, mBananas, mOranges) 
{ 
    fruit.Slice(); 
} 

我正在使用.net 2.0。

回答

3
ArrayList list = new ArrayList(); 
list.AddRange(mApples); 
list.AddRange(mBananas); 
list.AddRange(mOranges); 

foreach(Fruit item in list) 
{ 
    item.Slice(); 
} 
+0

這似乎工作得很好。謝謝! – Blake 2011-04-26 22:56:04

4

你將不得不以連接列表

foreach(Fruit fruit in mApples.Cast<Fruit>() 
     .Concat(mBananas.Cast<Fruit>()) 
     .Concat(mOranges.Cast<Fruit>())) 
{ 
    fruit.Slice(); 
} 

編輯

這將是一個可能的2.0解決方案

foreach(Fruit fruit in Concat<Fruit>(mApples, mBananas, mOranges)) 
    { 
     fruit.Slice(); 
    } 

    public static IEnumerable<T> Concat<T>(params IEnumerable<T>[] arr) 
    { 
     foreach (IEnumerable col in arr) 
     foreach (T item in col) 
      yield return item; 
    } 
+0

我不認爲 '演員' 的在.net 2.0中可用(應該已經明確)。這似乎是一個很好的伎倆,雖然。 – Blake 2011-04-26 22:37:39

+0

@Blake我不害怕Concat。 – Magnus 2011-04-26 22:42:37

+0

因此,代碼不起作用,獲得upvoted 4次...很好。 – 2011-04-26 22:43:55

相關問題