C# TreeHelper帮助类

网友投稿 707 2022-10-06

C# TreeHelper帮助类

C# TreeHelper帮助类

///

/// 树结构帮助类 /// public class TreeHelper { #region 外部接口 /// /// 建造树结构 /// /// 所有的节点 /// public static List BuildTree(List allNodes) where T : TreeModel, new() { List resData = new List(); var rootNodes = allNodes.Where(x => x.ParentId == "0" || x.ParentId.IsNullOrEmpty()).ToList(); resData = rootNodes; resData.ForEach(aRootNode => { if (HaveChildren(allNodes, aRootNode.Id)) aRootNode.Children = GetChildren(allNodes, aRootNode); }); return resData; } /// /// 获取所有子节点 /// 注:包括自己 /// /// 节点类型 /// 所有节点 /// 父节点 /// 是否包括自己 /// public static List GetChildren(List allNodes, T parentNode, bool includeSelf) where T : TreeModel { List resList = new List(); if (includeSelf) resList.Add(parentNode); _getChildren(allNodes, parentNode, resList); return resList; void _getChildren(List _allNodes, T _parentNode, List _resNodes) { var children = _allNodes.Where(x => x.ParentId == _parentNode.Id).ToList(); _resNodes.AddRange(children); children.ForEach(aChild => { _getChildren(_allNodes, aChild, _resNodes); }); } } #endregion #region 私有成员 /// /// 获取所有子节点 /// /// 树模型(TreeModel或继承它的模型) /// 所有节点列表 /// 父节点Id /// private static List GetChildren(List nodes, T parentNode) where T : TreeModel, new() { Type type = typeof(T); var properties = type.GetProperties().ToList(); List resData = new List(); var children = nodes.Where(x => x.ParentId == parentNode.Id).ToList(); children.ForEach(aChildren => { T newNode = new T(); resData.Add(newNode); //赋值属性 properties.Where(x => x.CanWrite).ForEach(aProperty => { var value = aProperty.GetValue(aChildren, null); aProperty.SetValue(newNode, value); }); //设置深度 newNode.Level = parentNode.Level + 1; if (HaveChildren(nodes, aChildren.Id)) newNode.Children = GetChildren(nodes, newNode); }); return resData; } /// /// 判断当前节点是否有子节点 /// /// 树模型 /// 所有节点 /// 当前节点Id /// private static bool HaveChildren(List nodes, string nodeId) where T : TreeModel, new() { return nodes.Exists(x => x.ParentId == nodeId); } #endregion }

扩展方法:

public static partial class Extention { ///

/// 判断是否为Null或者空 /// /// 对象 /// public static bool IsNullOrEmpty(this object obj) { if (obj == null) return true; else { string objStr = obj.ToString(); return string.IsNullOrEmpty(objStr); } } /// /// 给IEnumerable拓展ForEach方法 /// /// 模型类 /// 数据源 /// 方法 public static void ForEach(this IEnumerable iEnumberable, Action func) { foreach (var item in iEnumberable) { func(item); } } }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信小程序商城项目之购物数量加减(微信小程序购物车加减)
下一篇:组件的自定义事件②
相关文章

 发表评论

暂时没有评论,来抢沙发吧~