我想創建一個linq像擴展方法來從層次結構像樹一樣獲取所有項目。使用嵌套的泛型沒有很多的代碼
這是我的分機
public static List<T> GetAllRecursive<T, TU>(this IList<T> list, Func<T, TU> func) where TU : IEnumerable<T> {
var allList = new List<T>();
var toAdd = list.ToList();
while(true) {
allList.AddRange(toAdd);
var childs = toAdd.SelectMany(x => func(x)).ToList();
if(childs.Count == 0) {
return allList;
}
toAdd = childs;
}
}
我這樣稱呼它
var allGuidelines = Guidelines.GetAllRecursive(x => (IEnumerable<MachineGuidelineTreeItemViewModel>)x.Children);
我怎樣才能改善這個梅索德所以我不需要投,每次我用這個?
在此先感謝
孩子的返回類型是什麼? –
,你爲什麼需要將它轉換爲IEnumerable呢?是不是x.Children IEnumerable <>已經?它是一個更通用的類型,例如,IEnumerable
孩子是一個BindableCollection –
horotab