我有以下类(稍微缩短一点)并尝试删除一个菜单项:
public class LinkItem
{
public string LinkName { get; set; }
}
public class MenuItem
{
List<LinkItem> _LinkItems = new List<LinkItem>();
List<MenuItem> _MenuItems = new List<MenuItem>();
public string MenuName { get; set; }
public void AddLinkItem(LinkItem LinkItemToAdd)
{
LinkItems.Add(LinkItemToAdd);
}
public void DeleteLinkItem(LinkItem LinkItemToDelete)
{
LinkItems.Remove(LinkItemToDelete);
}
public void AddMenuItem(MenuItem MenuItemToAdd)
{
MenuItems.Add(MenuItemToAdd);
}
public void DeleteMenuItem(MenuItem MenuItemToDelete)
{
MenuItems.Remove(MenuItemToDelete);
}
public List<LinkItem> LinkItems
{
get { return _LinkItems; }
set { _LinkItems = value; }
}
//private List<MenuItem> _ListOfMenuItems;
public List<MenuItem> MenuItems
{
get { return _MenuItems; }
set { _MenuItems = value; }
}
}
public static class FullMenu
{
static CompleteMenu()
{
_CompleteMenuItems = new List<MenuItem>();
}
private static List<MenuItem> _MenuItems;
public static List<MenuItem> MenuItems
{
get
{
return _CompleteMenuItems;
}
set
{
_CompleteMenuItems = value;
}
}
}
然后我添加一些项目,结构如下:
FullMenu
- &gt; MenuItem1
-----&gt; LinkItem1
- &gt; MenuItem2
------&gt; SubMenuItem1
--------&gt;
SubLinkItem1
------&gt; LinkItem2
- &gt; MenuItem3
-----> LinkItem3
所以它是一个嵌套的结构。
如果我想删除一个MenuItem(例如SubMenuItem1),我必须在嵌套结构中找到它以删除它。
是否有办法(使用linq或lambda)搜索MenuItem而不循环遍历FullMenu的所有项目?
我尝试的所有内容只能在FullMenu的第一级找到项目。
答案 0 :(得分:2)
将您添加的内容存储在Dictionary<string, object>
中,其中string
类似于ID,您可以从中识别该项目。 object
是LinkItem
或MenuItem
的实际实例。
当您决定删除某个项目时,请使用键从字典中获取该项目,然后将其删除。