Rekursiver Aufruf return eine Liste, Rückkehr Typ verursacht mir Probleme
Ich habe eine rekursive Methode, die mich zurückbringen Kategorien, und die überprüfung für seine sub-Kategorien.
So wie es aussieht:
public List<Category> GetAllChildCats(int categoryid)
{
List<Category> list = new List>Category>();
Category c = Get(categoryid);
foreach(Category cat in c.ChildCategories)
{
list.Add( GetAllChildCats(cat.CategoryID) )
}
}
Dies fehlschlägt, weil der Aufruf-Liste.fügen Sie erwartet ein Kategorie-Objekt, aber es wird zurückkehren doch eine andere Liste, wie soll ich arbeiten, um dieses?
InformationsquelleAutor der Frage mrblah | 2009-10-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Derzeit Sie haben nicht gezeigt, was wirklich fügt eine einzelne Kategorie auf der Liste... ich gehe davon aus, dass, wie Sie recurse, die Sie hinzufügen möchten, die Ergebnisse der
Get(categoryId)
sowie·Preet Lösung wird sicherlich funktionieren, aber hier ist eine alternative, die vermeidet das erstellen von all den extra-Listen:
Dieser erstellt eine Liste und Elemente Hinzugefügt, wie es geht.
Einen Punkt, obwohl - wenn Sie schon bekam das Kind
Category
Objekte, tun Sie wirklich brauchen, um zu rufenGet
wieder? Nicht jedes Kind enthalten nur Ihre ID, bis du da die ganze Kategorie?InformationsquelleAutor der Antwort Jon Skeet
und vergessen Sie nicht, die
InformationsquelleAutor der Antwort Preet Sangha
Ich denke, das linq-version können Sie vermeiden, den Aufwand der Erstellung einer Liste:
Können Sie immer rufen ToList() auf das zurückgegebene IEnumerable, wenn Sie es brauchen.
InformationsquelleAutor der Antwort Lee
Ich hatte das gleiche problem vor. Hier ist die Art, wie ich es gelöst:
InformationsquelleAutor der Antwort Rit
Hier ist eine modifizierte version von Jon Skeet ist die Antwort, die die Verwendung einer lokalen Methode (C# 7) :
InformationsquelleAutor der Antwort Akli