有時候在進行C#項目開發中,需要獲取到公共節點,如下圖所示:
譬如,當點擊“Test103-2”節點,其類型是“燈”類型,那怎么獲取到“中心區域”這個類型是“地域”的公共節點?對此具體實現方法如下:
主要功能代碼如下:
/// <summary>/// 向上遞歸,獲取符合條件的父節點/// </summary>/// <param name="node">需要向上遞歸的節點</param>/// <param name="conditionHanlder">判斷條件【委托】</param>/// <returns>符合條件的節點【TreeListNode】</returns>public static TreeListNode GetParentNode(this TreeListNode node, Predicate<TreeListNode> conditionHanlder){ TreeListNode _parentNode = node.ParentNode;//獲取上一級父節點 TreeListNode _conditonNode = null; if (_parentNode != null) { if (conditionHanlder(_parentNode))//判斷上一級父節點是否符合要求 { _conditonNode = _parentNode; } if (_conditonNode == null)//若沒有找到符合要求的節點,遞歸繼續 _conditonNode = GetParentNode(_parentNode, conditionHanlder); } return _conditonNode;}/// <summary>/// 向上遞歸節點/// </summary>/// <param name="node">需要向上遞歸的節點</param>/// <param name="conditionHanlder">委托,返回fasle跳出遞歸;返回true繼續遞歸;</param>public static void UpwardRecursiveNode(this TreeListNode node, Predicate<TreeListNode> conditionHanlder){ TreeListNode _parentNode = node.ParentNode; if (_parentNode != null) { if (conditionHanlder(_parentNode)) { UpwardRecursiveNode(_parentNode, conditionHanlder); } }}/// <summary>/// 向上遞歸,獲取符合條件的節點的公共父節點/// </summary>/// <param name="node">操作節點</param>/// <param name="checkHanlder">委托</param>/// <returns>符合條件的節點</returns>public static TreeListNode GetPublicParentNode(this TreeListNode node, Predicate<TreeListNode> checkHanlder){ TreeListNode _publicPNode = null; TreeListNode _findNode = node.GetParentNode(checkHanlder);//先獲取到條件判斷的自身父節點 if (_findNode != null) { //開始向上遞歸 UpwardRecursiveNode(_findNode, n => { TreeListNode _curpublicNode = n.ParentNode;//獲取當前向上遞歸的父節點 if (_curpublicNode != null) { if (_curpublicNode.Nodes.Count > 1)//若有多個子節點,則是公共父節點 { _publicPNode = _curpublicNode; return false;//跳出遞歸 } } return true;//繼續遞歸 }); } return _publicPNode;}
希望本文所述示例對大家進行類似的C#項目開發能有所幫助!
新聞熱點
疑難解答