c# - 带有 MethodInfo 和泛型类型参数的 Expression.Call

标签 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);
    }
}

最佳答案

您可以使用 MethodInfo.MakeGenericMethod:

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

关于c# - 带有 MethodInfo 和泛型类型参数的 Expression.Call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40263341/

相关文章:

c# - 我可以针对未授权或未验证抛出的 .NET 异常

.net - 我如何最好地解决这个对象类型层次结构?某种枚举层次结构?

c# - .NET 中包关系的目的是什么?

c# - 通过 ASMX Web 服务序列化时保持空格/换行符

c# - 为什么将 LinearGradientBrush.WrapMode 设置为 Clamp 会因 ArgumentException ("parameter is not valid"失败)?

.net - 使用 powershell 解析程序集依赖项引用

c# - 如何优化这个 linq 查询?

c# - 嵌套的 Select MySQL 语句到 LINQ

c# - 从 DataTable 创建列表

c# - 调整大小时某些图像会旋转