如果列表为空,则从递归函数中删除列表

时间:2018-04-06 03:56:29

标签: c# json treeview

以下是C#(。cs)

的示例代码
private List<Menu> GetMenuTree(List<Menu> list, int? idparent)
{
    return list.Where(x => x.IDParent == idparent).Select(x => new Menu()
    {
        ID = x.ID,
        IDParent = x.IDParent,
        text = x.text,
        List = GetMenuTree(list, x.ID)
    }).ToList();
}

在节点的大多数孩子中,它给了我(&gt;),因为List是空的。

enter image description here

结果是JSON

{"ID":1,"IDParent":null,"text":"Furniture",
      "List":
           [{"ID":2,"IDParent":1,"text":"Table","List":[]},
            {"ID":3,"IDParent":1,"text":"Chairs","List":[]}]
}

List []为空。 如果它在节点的最多子节点中如何删除它?

1 个答案:

答案 0 :(得分:1)

我会添加另一个确定是否有孩子的函数:

private List<Menu> GetMenuTree(List<Menu> list, int? idparent)
{
    return list.Where(x => x.IDParent == idparent).Select(x => new Menu()
    {
        ID = x.ID,
        IDParent = x.IDParent,
        text= x.text,
        List = HasChildren(list, x.ID) ? GetMenuTree(list, x.ID) : null
    }).ToList();
}

public bool HasChildren(List<Menu> list, int? idparent)
{
    return list.Where(x => x.IDParent == idparent).FirstOrDefault() != null;
}

或者你可以在GetMenuTree函数中“内联”,但我认为这种可读性更好。