publicclassCollectionHelper
{
privatestaticArrayListFill(intpID,intlevel,ArrayListlist)
{
ArrayListreturnList=newArrayList();
foreach(objectobjinlist)
{
inttypePID=(int)ReflectionUtil.GetProperty(obj,"PID");
inttypeID=(int)ReflectionUtil.GetProperty(obj,"ID");
stringtypeName=ReflectionUtil.GetProperty(obj,"Name")asstring;
if(pID==typePID)
{
stringnewName=newstring('-',level*4)+typeName;
ReflectionUtil.SetProperty(obj,"Name",newName);
returnList.Add(obj);
returnList.AddRange(Fill(typeID,level+1,list));
}
}
returnreturnList;
}
///<summary>
///生成有层次结构的列表
///</summary>
///<paramname="list">具有Name,ID,PID成员的任何集合</param>
///<returns></returns>
publicstaticArrayListGetTreeItems(ArrayListlist)
{
returnFill(-1,0,list);
}
}
publicsealedclassReflectionUtil
{
privateReflectionUtil()
{}
publicstaticBindingFlagsbf=BindingFlags.DeclaredOnly|BindingFlags.Public|
BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Static;
publicstaticvoidSetProperty(objectobj,stringname,objectvalue)
{
PropertyInfofi=obj.GetType().GetProperty(name,bf);
fi.SetValue(obj,value,null);
}
publicstaticobjectGetProperty(objectobj,stringname)
{
PropertyInfofi=obj.GetType().GetProperty(name,bf);
returnfi.GetValue(obj,null);
}
}
效果图如下
本文转自博客园伍华聪的博客,原文链接:记录转化为有层次结构的树状列表的通用算法,如需转载请自行联系原博主。