Expression.Call与MethodInfo和泛型类型参数

时间:2016-10-26 13:15:49

标签: c# .net linq generics expression

如何将Expression.Call与MethodInfo和泛型类型参数一起使用? 只有使用methodName重载的是typeArguments。

var methodInfo = typeof(MyClass).GetMethod("OutputTypeName");          
var expression = Expression.Call(methodInfo);
Expression.Lambda<Action>(expression).Compile()();

public static class MyClass
{
    public static void OutputTypeName<T>()
    {
        Console.WriteLine("Type: " + typeof(T).Name);
    }
}

1 个答案:

答案 0 :(得分:2)

您可以使用MethodInfo.MakeGenericMethod:

var methodInfo = typeof(MyClass).GetMethod("OutputTypeName");
var genericMethodInfo = methodInfo.MakeGenericMethod(typeof(int));
var expression = Expression.Call(genericMethodInfo);
...