protected override Expression VisitMethodCall(MethodCallExpression node) { var mi = node.Method; if (mi.IsGenericMethod) { Type[] changedTypes = ReflectionX.SubstituteTypes(mi.GetGenericArguments(), from, to); if (changedTypes != null) { MethodInfo newMi = mi.GetGenericMethodDefinition().MakeGenericMethod(changedTypes); if (node.Object == null) { return(Expression.Call(newMi, node.Arguments.Select(a => Visit(a)))); } else { return(Expression.Call(node.Object, newMi, node.Arguments.Select(a => Visit(a)))); } } } return(base.VisitMethodCall(node)); }