Ich möchte eine Linq-ähnliche Erweiterungsmethode erstellen, um alle Elemente aus einer hierarchischen Struktur wie eine Struktur zu erhalten.Verwenden Sie verschachtelte Generika ohne viel Code
das ist meine Erweiterung
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;
}
}
Ich nenne es wie dieses
var allGuidelines = Guidelines.GetAllRecursive(x => (IEnumerable<MachineGuidelineTreeItemViewModel>)x.Children);
Wie kann ich diese Methode zu verbessern, so brauche ich nicht jedes Mal wenn ich diese verwenden zu werfen?
Vielen Dank im Voraus
Was ist der Rückgabetyp von Kindern? –
und warum müssen Sie es überhaupt in IEnumerable umwandeln? Ist x.Children nicht bereits IEnumerable <>? Ist es ein generischer Typ, zum Beispiel IEnumerable
Children ist eine BindableCollection –
horotab