1
我想通過一個菜單列舉,但我似乎無法一路下到孩子們。IEnumerator問題
我的模型看起來像這樣。
public class Menu : IEnumerable<Menu>
{
public new IEnumerable<Menu> Children { get; set; }
public IEnumerator<Menu> GetEnumerator()
{
return new MenuEnumerator(this);
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
public class MenuEnumerator : IEnumerator<Menu>
{
private readonly Menu _menu;
public MenuEnumerator(Menu menu)
{
_menu = menu;
}
public bool MoveNext()
{
if (this.Current == null)
{
this.Current = this._menu;
}
return true;
}
public void Reset()
{
}
public Menu Current { get; set; }
object IEnumerator.Current => Current;
public void Dispose()
{
this.Current = null;
}
}
我的菜單結構
public static IEnumerable<Menu> GetMenuStructure()
{
return new Menu
{
Children = new List<Menu>
{
new Menu
{
PkLinkId = 2,
FkParentLinkId = null,
Target = "_self",
Text = "Company",
Children = new List<Menu>()
{
new Menu()
{
PkLinkId = 4,
FkParentLinkId = 2,
Target = "_self",
Text = "Add A New Company",
},
new Menu()
{
PkLinkId = 27,
FkParentLinkId = 2,
Target = "_self",
Text = "Basic Company Information",
},
}
},
new Menu()
{
PkLinkId = 5,
FkParentLinkId = null,
Target = "_self",
Text = "Bureau",
Children = new List<Menu>()
{
new Menu()
{
PkLinkId = 31,
FkParentLinkId = 5,
Target = "_self",
Text = "Admin",
},
new Menu()
{
PkLinkId = 76,
FkParentLinkId = 5,
Target = "_self",
},
}
}
}
};
}
在每次迭代我想進入MoveNext
函數,這樣我可以做的menuitem
某些安全檢查,但我永遠不能獲得孩子的價值。
我知道我可以使用linq來做到這一點,但我的想法是拆分安全代碼檢查,以便我不污染我的foreach語句。
foreach (var menuItem in menu)
{
}
有一個很難解釋我的問題,我想完成
您是否在尋找['yield return'](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/yield)? – Cameron
爲什麼不把'MenuEnumerator'作爲'Children.GetEnumerator()'返回的枚舉器的一個包裝?轉發所有電話。 –
你想返回菜單本身+所有的孩子和子女? – Evk