我有一个小程序,它应该创建一个简单的菜单。 我目前的问题是,我有一个对象应该填充主菜单点,然后所有菜单点下。 我的问题是,一个IList中可以有第二或第三的IList和我真的不知道如何interate在n ILists通过对象迭代对象列表
例子:
MainNodeObj:
NodeDtoId = 1,
ItemCode = 'A'
IList<NodeDTO> ChildMenuNodes
{
MainNodeObj:
NodeDtoId = 2,
ItemCode = '2',
IList<NodeDTO> ChildMenuNodes
{
MainNodeObj:
NodeDtoId = 3,
ItemCode = '3',
}
我的问题是,每个ChildNode可以有一个新的childnode并为每个子节点,我将创建新的对象......听起来很容易,但我不知道如何来遍历n个新的childNodes
方法:
private IEnumerable<NodeDTO> SortedNodes(int id)
{
var nodes = LoadMenuNodes(id);
foreach (MenuNode menuNode in nodes
.Where(s => s.MenuItemId == null && s.ParentNodeId == null)
.OrderBy(x => x?.Sequence))
{
NodeDTO tmpMenuNode = new NodeDTO();
tmpMenuNode.MenuNodeDtoId = menuNode.Id;
tmpMenuNode.MenuItemCode = menuNode.MenuItem?.Code;
tmpMenuNode.ChildMenuNodes = LoadChildNodes(menuNode.ChildMenuNodes).ToList();
yield return tmpMenuNode;
}
}
private IEnumerable<NodeDTO> LoadChildNodes(MenuNodeList menuNode)
{
foreach (MenuNode childNode in menuNode)
{
NodeDTO tmChildNode = new NodeDTO();
tmChildNode.MenuNodeDtoId = childNode.Id;
tmChildNode.MenuItemCode = childNode?.MenuItem?.Code;
tmChildNode.ChildMenuNodes = null;
yield return tmChildNode;
}
}
public class NodeDTO
{
public int NodeDtoId { get; set; }
public string ItemCode { get; set; }
public IList<NodeDTO> ChildMenuNodes { get; set; }
}
我的问题是,每个childnode可以有一个新的子节点 –
是否DTO需要有所有孩子们在一个单子里?还是需要保持分层布局? – ErazerBrecht
它看起来像'LoadChildNodes'作为递归函数可以帮助你。 –