2012-04-21 68 views
1

我有一個包含子對象列表的對象,每個子對象都包含一個子列表,依此類推。僅僅使用第一代兒童,我想盡可能幹淨和便宜地將所有這些列表結合起來。我知道我可以做類似有沒有LINQ方法來加入/連接未知數量的列表?

public List<T> UnifiedListOfTChildren<T>() 
    { 
     List<T> newlist = new List<T>(); 
     foreach (childThing in myChildren) 
     { 
      newlist = newlist.Concat<T>(childThing.TChildren); 
     } 
     return newlist; 
    } 

但是有沒有更優雅,更便宜的LINQ方法我錯過了?

編輯如果你已經在這個問題降落的方式我做相同的,是新的SelectMany,我強烈推薦的如何使用它this visual explanation。目前在谷歌搜索結果中名列前茅,但值得直接跳過。

回答

3
var newList = myChildren.SelectMany(c => c.TChildren); 
+0

一直困惑,直到你添加.TChildren。謝謝,我根本不知道SelectMany。令人難以置信的有用。 – downwitch 2012-04-21 16:48:44

+0

有時我希望SO會允許後續/相關問題......我可以將SelectMany與OfType類型的實現結合起來,其中lambda可以使用派生類型的屬性? – downwitch 2012-04-21 18:07:19

+0

@downwitch - 'SelectMany'返回'IEnumerable ',所以你可以在返回的序列中使用'OfType'。 – Lee 2012-04-21 18:24:41

相關問題