protected override Expression VisitMethodCallExpression (MethodCallExpression expression)
{
// Method arguments and target instance are always values
var newInstance = expression.Object != null ? ApplyValueContext (expression.Object) : null;
var newArguments = expression.Arguments.Select (ApplyValueContext).ToArray();
if (newInstance != expression.Object || !newArguments.SequenceEqual (expression.Arguments))
return Expression.Call (newInstance, expression.Method, newArguments);
return expression;
}