public IEnumerable <ParentedNode> GetParentChain()
        {
            var          chain   = new List <ParentedNode>();
            ParentedNode current = this;

            while (current.Parent != null)
            {
                chain.Add(current);
                current = current.Parent;
            }

            chain.Reverse();
            return(chain);
        }
        public T GetNearestParent <T>() where T : ParentedNode
        {
            ParentedNode current = this;

            while (current.Parent != null)
            {
                current = current.Parent;
                if (current is T)
                {
                    return((T)current);
                }
            }

            return(null);
        }