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

时间:2017-06-16 12:03:37

标签: c#

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

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的第一级找到项目。

1 个答案:

答案 0 :(得分:2)

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

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