Witam. Jestem amatorem i mam pewien problem. Chcę dodawać elementy do listy przez wywołanie metody AddRange, w której jako argument przekazuje wywołanie metody rekurencyjnej zwracającej listę tego samego typu. Podczas debugowania po instrukcji return do listy zostają dodane elementy ale po powrocie do siebie przez funckję rekurencyjną (przekazaną jako parametr) lista od razu się zeruje. Wiem, że to co napisałem to troch masło maślane ale trudno mi to inaczej ubrać w słowa.
Mam w bazie kategorie, które zawierają albo bezpośrednio produkty (jeśli są kategoriami najbardziej szczegółowymi) albo nie zawierają bezpośrednio produktów, a zawierają numer id podkategorii, która z kolei może zawierać następne podkategorie. Po kliknięciu kategorii głównej chce wyszukać w niej kategorie najbardziej szczegółowe, a z nich wyciągnąć produkty.
[ChildActionOnly]
public ActionResult ShowProductList(int selectedCategoryId = 0)
{
var items = new List<Item>();
if (selectedCategoryId != 0)
{
var category = db.Categories.Where(c => c.Id == selectedCategoryId).Single();
items.AddRange(FindItemsInCategory(category));//-przekazanie wywołania metody rekurencyjnej
}
else
{
items = db.Items.ToList();
}
return PartialView("_ProductList", items);
}
public List<Item> FindItemsInCategory (Category category)
{
var items = new List<Item>();
if(category.ChildCategoriesId.Count != 0)
{
foreach (var childId in category.ChildCategoriesId)
{
FindItemsInCategory(db.Categories.Where(c => c.Id == childId.ChildId).Single());//-rekurencja
}
}
else
{
items.AddRange(category.Items.ToList());
}
return items;
}
Czemu po kazdym kolejnym powrocie rekurencyjnym lista items w akcji ShowProductList się zeruje skoro nie przypisuje wartości poprzez = tylko ją dodaje?