2017-06-16 143 views
1

我有以下的類(一點點縮短),並嘗試刪除一個菜單項:查找一個嵌套組對象的對象,並刪除它

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
- > MenuItem1
----> LinkItem1
- > MenuItem2
------> SubMenuItem1
-------->
小號ubLinkItem1
------> LinkItem2
- > MenuItem3
----> LinkItem3

所以其嵌套結構。

如果我想刪除一個MenuItem(例如SubMenuItem1),我必須在嵌套結構中找到它來刪除它。

有沒有一種方法(與linq或lambda)搜索MenuItem沒有循環所有項目的FullMenu?

我試過的所有東西都只能在FullMenu的第一級找到物品。

+0

也許可以證明你試過了什麼,讓我們從那裏出發? –

+0

否。爲了減少搜索時間,您可以創建包含所有SubMenuItem的列表<>對象或字典,但是除非SubMenuItem類包含父項的屬性,否則將無法刪除項目,因此您可以刪除項目。 – jdweng

+0

Linq無法做到這一點。這只是一個樹解析。只需在MenuItem中創建一個私有方法'RemoveMenu(string menuName)',並在所有'_MenuItems'上循環,如果該項目是您正在尋找的項目,請移除它,否則調用子方法'child.RemoveMenu(menuName)' – Franck

回答

2

存儲您在Dictionary<string, object>中添加的任何內容,其中string與您可以識別項目的id類似。 objectLinkItemMenuItem的實際實例。

當您決定刪除一個項目時,使用鍵從字典中獲取該項目並刪除它。