public static IBinaryTreeNode <TResult> Select <TItem, TResult>( this IBinaryTreeNode <TItem> node, Func <TItem, TResult> selector) { if (node == null) { throw new ArgumentNullException(nameof(node)); } if (selector == null) { throw new ArgumentNullException(nameof(selector)); } var visitor = new SelectBinaryTreeNodeVisitor <TItem, TResult>(selector); return(node.Accept(visitor)); }