Пример #1
0
        public IEnumerable <TNode> FindNodes <TNode>(StNodeBase node, Func <StNodeBase, bool> selector = null) where TNode : StNode
        {
            SearchVisitorContext context = new SearchVisitorContext()
            {
                SearchedType = typeof(TNode),
                Selector     = selector
            };

            this.Visit(node, context);

            return(context.Result.Cast <TNode>());
        }
Пример #2
0
        public void Visit(StNodeBase node, SearchVisitorContext context)
        {
            if (node != null && context.SearchedType != null &&
                (context.SearchedType == null || context.SearchedType.IsAssignableFrom(node.GetType())) &&
                (context.Selector == null || context.Selector(node)))
            {
                context.Result.Add(node);
            }

            foreach (var childNode in node.ChildNodes)
            {
                this.Visit(childNode, context);
            }
        }