Ejemplo n.º 1
0
        private static IList <TreeingNode <T, TId> > LookupNodes <T, TId>(IEnumerable <T> items,
                                                                          TId?parentId, int depthLevel = 0)
            where T : IParentIdentifier <TId>
            where TId : IEquatable <TId>
        {
            var nodes = new List <TreeingNode <T, TId> >();

            // 提取父元素集合
#pragma warning disable CS8602 // 解引用可能出现空引用。
            var parents = items.Where(p => p.IsNotNull() && p.ParentId.Equals(parentId));
#pragma warning restore CS8602 // 解引用可能出现空引用。

            if (parents.IsEmpty())
            {
                return(nodes);
            }

            foreach (var p in parents)
            {
                var node = new TreeingNode <T, TId>(p, depthLevel);

                var children = LookupNodes(items, p.Id, node.DepthLevel + 1);
                node.Children = children;

                nodes.Add(node);
            }

            return(nodes);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 是否包含指定标识的子节点。
        /// </summary>
        /// <param name="childId">给定的子节点信号。</param>
        /// <param name="child">输出当前子节点。</param>
        /// <returns>返回布尔值。</returns>
        public virtual bool ContainsChild(TId childId, out TreeingNode <T, TId> child)
        {
#pragma warning disable CS8601 // 可能的 null 引用赋值。
            child = GetChild(childId);
#pragma warning restore CS8601 // 可能的 null 引用赋值。

            return(child.IsNotNull());
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 是否相等。
        /// </summary>
        /// <param name="other">给定的 <see cref="TreeingNode{T, TId}"/>。</param>
        /// <returns>返回布尔值。</returns>
        public virtual bool Equals(TreeingNode <T, TId>?other)
        {
            if (other is null)
            {
                return(false);
            }

#pragma warning disable CS8602 // 解引用可能出现空引用。
            return(Id.Equals(other.Id) && ParentId.Equals(other.ParentId));

#pragma warning restore CS8602 // 解引用可能出现空引用。
        }