public static List <T> GetNodes <T>(ExpressionNode node) where T : ExpressionNode { List <T> objList = new List <T>(); if (node == null) { return(objList); } Stack <ExpressionNode> expressionNodeStack = new Stack <ExpressionNode>(); expressionNodeStack.Push(node); while (expressionNodeStack.Count > 0) { ExpressionNode expressionNode1 = expressionNodeStack.Pop(); if (expressionNode1 is T) { objList.Add((T)expressionNode1); } IEnumerable <ExpressionNode> childNodes = expressionNode1.GetChildNodes(); if (childNodes != null) { foreach (ExpressionNode expressionNode2 in childNodes) { if (expressionNode2 != null) { expressionNodeStack.Push(expressionNode2); } } } } return(objList); }
public static List <T> GetNodes <T>(ExpressionNode node) where T : ExpressionNode { List <T> nodes = new List <T>(); if (node == null) { return(nodes); } Stack <ExpressionNode> nodeStack = new Stack <ExpressionNode>(); nodeStack.Push(node); while (nodeStack.Count > 0) { ExpressionNode currentNode = nodeStack.Pop(); if (currentNode is T) { nodes.Add((T)currentNode); } IEnumerable <ExpressionNode> childNodesCollection = currentNode.GetChildNodes(); if (childNodesCollection != null) { foreach (ExpressionNode childNode in childNodesCollection) { if (childNode != null) { nodeStack.Push(childNode); } } } } return(nodes); }