public static XObject Accept(this XObject node, XObjectVisitor visitor) { CheckNullReference(node); CheckArgumentNull(visitor, "visitor"); // yay, easy dynamic dispatch Acceptor acceptor = new Acceptor(node as dynamic); return(acceptor.Accept(visitor)); }