public void Select <TNode>(Node <TNode> node) where TNode : class { _node = null; node.Accept(this); if (_node == null) { EqualNode <T, TProperty> equalNode = _configurator.Equal <T, TProperty>(); 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(equalNode); _node = equalNode; } _next.Select(_node[_value]); }