首页 > 学院 > 开发设计 > 正文

c#通用递归生成无限层级树

2019-11-14 13:41:37
字体:
来源:转载
供稿:网友

NewsType结构:

Id

ParentId

Name

children(List<NewsType>)

 

public void LoopToAppendChildren(List<NewsType> all,  NewsType curItem){    var subItems = all.Where(ee => ee.ParentId==curItem.Id).ToList();     curItem.children = new List<NewsType>();    curItem.children.AddRange(subItems);    foreach (var subItem in subItems)    {        LoopToAppendChildren(all, subItem);//新闻1.1    }}

 

//通用 ParentId,Id,children 用了反射效率不高

public void LoopToAppendChildren<T>(List<T> all, T curItem, string parentIdName = "ParentId", string idName = "Id", string childrenName = "children")
{
  var subItems = all.Where(ee => ee.GetType().GetPRoperty(parentIdName).GetValue(ee, null).ToString() == curItem.GetType().GetProperty(idName).GetValue(curItem, null).ToString()).ToList(); //新闻1

  curItem.GetType().GetField(childrenName).SetValue(curItem, subItems);
  foreach (var subItem in subItems)
  {
    LoopToAppendChildren(all, subItem);//新闻1.1
  }
 }


调用:
//实例化一个根节点NewsType rootRoot = new NewsType();rootRoot.Id = 0;rootRoot.ParentId = 0; rootRoot.Name="根节点";LoopToAppendChildren(dc.NewsType.ToList(), rootRoot);

 

 

 

原文地址:http://www.VEVb.com/xuejianxiyang/p/5027280.html


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表