0
在C#中,如果我有一個T類型的CollectionBase,並且CollectionBase中的每個項目都可以具有相同類型T的子類CollectionBase,那麼如何在不使用遞歸函數的情況下獲得所有類型T對象的列表?如何獲取CollectionBase項目的列表?
LINQ是否有這個功能?
在此先感謝。
在C#中,如果我有一個T類型的CollectionBase,並且CollectionBase中的每個項目都可以具有相同類型T的子類CollectionBase,那麼如何在不使用遞歸函數的情況下獲得所有類型T對象的列表?如何獲取CollectionBase項目的列表?
LINQ是否有這個功能?
在此先感謝。
韋斯代爾實際上寫了一個很好的話題,有一個look。
至於你的情況,我認爲你需要一個迭代器,大概是這樣的:
public static IEnumerable<T> Flatten<T>(this IEnumerable<T> e, Func<T,IEnumerable<T>> f)
{
return e.SelectMany(c => f(c).Flatten(f)).Concat(e);
}
這是回答是從here拍攝。
編輯:我只記得你也可以traverse這棵樹。
public static IEnumerable<T> Traverse<T>(T item, Func<T, IEnumerable<T>> childSelector)
{
var stack = new Stack<T>();
stack.Push(item);
while (stack.Any())
{
var next = stack.Pop();
yield return next;
foreach (var child in childSelector(next))
stack.Push(child);
}
}
孩子的物品可以有孩子等嗎?你爲什麼不想使用遞歸? – Blorgbeard
請參閱此[問題](http://stackoverflow.com/questions/4814242/linq-recursion-function)。 – Han
你能告訴我們一些CollectionBase的代碼嗎?我asume SelectMany是你在找什麼。 –