Je voudrais créer une méthode d'extension comme linq pour obtenir tous les éléments d'une structure hiérarchique comme un arbre.Utiliser des génériques imbriqués sans beaucoup de code
ceci est mon extension
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;
}
}
Je l'appelle comme ça
var allGuidelines = Guidelines.GetAllRecursive(x => (IEnumerable<MachineGuidelineTreeItemViewModel>)x.Children);
Comment puis-je améliorer cette Methode donc je ne ai pas besoin de jeter chaque fois que je l'utiliser?
Merci à l'avance
Quel est le type de retour des enfants? –
et pourquoi avez-vous besoin de le convertir en IEnumerable? X.Children n'est-il pas déjà IEnumerable <>? Est-ce un type plus générique, par exemple, IEnumerable
Children est un BindableCollection –
horotab