在一组嵌套的对象中查找对象并将其删除



我有以下类(稍微缩短了一点(,并尝试删除一个菜单项:

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;
        }
    }
}

然后我添加了一些项目,结构看起来像:

完整菜单 -
-> 菜单项 1
----> 链接项
1 --> 菜单项 2
------> 子菜单项 1
-------->
子链接项 1
------> 链接项 2
--> 菜单项 3
----> 链接项3

所以它是一个嵌套结构。

如果我想删除一个菜单项(例如子菜单项 1(,我必须在嵌套结构中找到它才能删除它。

有没有办法(使用 linq 或 lambda(搜索菜单项而不遍历 FullMenu 的所有项?

我尝试过的所有事情都只能在 FullMenu 的第一级中找到项目。

将您添加的任何内容存储在Dictionary<string, object>中,其中string类似于 id 的东西,您可以从中识别项目。 objectLinkItemMenuItem的实际实例。

当您决定删除某个项目时,请使用键从字典中获取该项目,然后将其删除。

最新更新