【发布时间】:2021-10-18 12:31:19
【问题描述】:
var result = new List<QuickSearchModel>();
var Navmenus = CommonConstants.GetNavItems();
var items = new List<NavMenuItem>();
Navmenus.ForEach(it =>
{
if (it.IsNested)
{
it.menuItems.ForEach(mi => items.Add(new NavMenuItem() { Name = it.Name + "/" + mi.Name, Link = mi.Link }));
}
else {
items.Add(new NavMenuItem() { Name = it.Name, Link = it.Link });
result.Add(new QuickSearchModel() { Id = "1", Title = it.Name, ItemType = it.Name, Route = it.Link });
}
});
return result;
在我返回结果时,我的代码块结束时,我期待 26 项。 在我的即时窗口中,我键入 items,我看到列出了 26 个 NavMenuItem 当我输入 result 时,我看到列出了 1 个 QuickSearchModel(我的项目列表中的第 3 个)
请看这两张图片作为参考
解决方案:
我最终做到了
public static List<QuickSearchModel> PageListFromNavMenu()
{
var Navmenus = CommonConstants.GetNavItems();
var items = new List<NavMenuItem>();
Navmenus.ForEach(it =>
{
if (it.IsNested)
{
it.menuItems.ForEach(mi => items.Add(new NavMenuItem() { Name = it.Name + "/" + mi.Name, Link = mi.Link }));
}
else {
items.Add(new NavMenuItem() { Name = it.Name, Link = it.Link });
}
});
return PageListFromNavMenu(items);
}
private static List<QuickSearchModel> PageListFromNavMenu(List<NavMenuItem> items)
{
var result = new List<QuickSearchModel>();
items.ForEach(it =>
{
result.Add(new QuickSearchModel() { Id="1", Title = it.Name, ItemType = it.Name, Route = it.Link });
});
return result;
}
很遗憾,我不得不通过第二个 For 循环来获得结果,但它确实奏效了。我希望我可以在 else 块中完成它。
【问题讨论】:
-
因为“else”被执行一次,“it.menuItems.ForEach in if”被执行了 25 次(或者更确切地说 (Navmenus.Count - 1) * (it.menuItems.Count) 给了 25)?
-
else 块执行 25 次。这就是我感兴趣的代码块。这是一个很好的观察。我确实添加了 2 张图片以供参考。
-
您只返回
result列表。items列表从未使用过。
标签: c# list linq enumeration