にそれを削除し、私は以下のクラス(少し短縮)を持っており、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
-------->
S ubLinkItem1
------> LinkItem2
- > MenuItem3
----> LinkItem3
だから、その入れ子構造。
1つのMenuItem(たとえばSubMenuItem1)を削除するには、それを削除するために入れ子構造内で見つけなければなりません。
FullMenuのすべての項目をループせずにMenuItemを検索する方法(linqまたはlambda)はありますか?
私が試したことは、FullMenuの第1レベルのアイテムのみを検索したことです。
おそらくあなたが試したことを実証し、そこから行こうとしますか? –
いいえ検索時間を短縮するために、すべてのSubMenuItemを含むリスト<>オブジェクトまたは辞書を作成できますが、SubMenuItemクラスには親アイテムのプロパティが含まれていなければアイテムを削除できないため、アイテムを削除できません。 – jdweng
Linqはそれを行うことはできません。それは単なる木の解析です。 'MenuItem'のプライベートメソッド' RemoveMenu(string menuName) 'を作成し、すべての' _MenuItems 'をループして、アイテムがあなたが探しているものならばそれを削除します。そうでなければ、子メソッド 'child.RemoveMenu(menuName)'を呼び出します。 – Franck