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的第一級找到物品。
也許可以證明你試過了什麼,讓我們從那裏出發? –
否。爲了減少搜索時間,您可以創建包含所有SubMenuItem的列表<>對象或字典,但是除非SubMenuItem類包含父項的屬性,否則將無法刪除項目,因此您可以刪除項目。 – jdweng
Linq無法做到這一點。這只是一個樹解析。只需在MenuItem中創建一個私有方法'RemoveMenu(string menuName)',並在所有'_MenuItems'上循環,如果該項目是您正在尋找的項目,請移除它,否則調用子方法'child.RemoveMenu(menuName)' – Franck