如何创建表达式<;操作>;给定.NET中的完全限定类名和方法名

本文关键字:方法 NET gt 创建 何创建 表达式 操作 lt 给定 | 更新日期: 2023-09-27 18:25:19

我需要创建一个Expression<Action>,它表示调用类上的方法。

作为输入,我有一个描述程序集和类名(标准完全限定类名)的字符串,以及另一个定义要调用的方法的字符串。

要调用的类/方法实际上在必须创建表达式的代码中不可用,所以我不能只写()=>MyClass.Invoke();——我没有MyClass的程序集作为引用。

如何创建表达式<;操作>;给定.NET中的完全限定类名和方法名

System.Action act = () =>
{
    var typeName = "";
    var methodName = "";
    var type = System.Type.GetType(typeName);
    var method = type.GetMethod(methodName);
    object[] constructorArgs = null;
    var obj = type.InvokeMember(null,  System.Reflection.BindingFlags.CreateInstance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance, null, null, constructorArgs);
    object [] methodArgs = null;
    method.Invoke(obj, methodArgs);
};
System.Linq.Expressions.Expression<System.Action> exp = () => act();
exp.Compile()();