/// <summary>
/// Visits a dynamic expression and visits <see cref="DynamicExpression.Arguments"/> that are passed
/// to <c>ref</c> or <c>out</c> parameters using <see cref="VisitLval"/>.
/// </summary>
/// <param name="node">The dynamic expression to visit.</param>
/// <returns>The result of visiting the dynamic expression.</returns>
protected virtual Expression VisitDynamicCore(DynamicExpression node)
{
var delegateType = node.DelegateType;
var invokeMethod = delegateType.GetMethod("Invoke");
var arguments = VisitArguments(node.Arguments, invokeMethod.GetParameters(), skip: 1);
return(node.Update(arguments));
}