/// <summary> /// 특정 NodeContainer의 자손 중 자식 노드가 없는 TreeNode들 (나무 잎) 을 열거합니다. /// </summary> /// <param name="nodeContainer"></param> /// <returns></returns> public static IEnumerable <RadTreeNode> FindLeafNodes(this IRadTreeNodeContainer nodeContainer) { nodeContainer.ShouldNotBeNull("nodeContainer"); if (IsDebugEnabled) { log.Debug(@"특정 NodeContainer 하위의 모든 Leaf Node (자식이 없는 노드) 들을 Depth First 방식으로 찾습니다. nodeContainer=[{0}]", nodeContainer.AsTextAndValue()); } return(nodeContainer.GetDescendentNodes().Where(n => n.Nodes.Count == 0)); }
/// <summary> /// Depth-First 탐색으로 특정 Node 와 그 자손 Node 들 중에 검사를 통과하는 Node들을 열거합니다. /// </summary> /// <param name="nodeContainer"></param> /// <param name="predicate"></param> /// <returns></returns> public static IEnumerable <RadTreeNode> FindNodes(this IRadTreeNodeContainer nodeContainer, Func <RadTreeNode, bool> predicate) { nodeContainer.ShouldNotBeNull("nodeContainer"); predicate.ShouldNotBeNull("predicate"); if (IsDebugEnabled) { log.Debug("특정 NodeContainer(TreeView or TreeNode)부터 predicate를 만족하는 RadTreeNode 들을 모두 열거합니다. nodeContainer=[{0}]", nodeContainer.AsTextAndValue()); } return(nodeContainer.GetDescendentNodes().Where(predicate)); }