public void Select <TNode>(Node <TNode> node) where TNode : class { _node = null; node.Accept(this); if (_node == null) { CompareNode <T, TProperty> compareNode = _configurator.Compare <T, TProperty>(_comparator, _value); var parentNode = node as Node <Token <T, TProperty> >; if (parentNode == null) { throw new ArgumentException("Expected " + typeof(T).Tokens() + ", but was " + typeof(TNode).Tokens()); } parentNode.AddActivation(compareNode); _node = compareNode; } _next.Select(_node); }