程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#通用遞歸生成無限層級樹,

c#通用遞歸生成無限層級樹,

編輯:C#入門知識

c#通用遞歸生成無限層級樹,


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.cnblogs.com/xuejianxiyang/p/5027280.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved