CreateDelegate 派生类必须提供实现

本文关键字:实现 派生 CreateDelegate | 更新日期: 2023-09-27 18:32:53

当调用创建编译表达式时,我试图在生成的编译委托上调用CreateDelegate,但是我遇到了一个NotSupportedException,解释是:派生类必须提供实现。如何为已编译的方法创建委托?

public delegate int AddOne(int input);
void Main()
{
    var input = Expression.Parameter(typeof(int));
    var add = Expression.Add(input,Expression.Constant(1));
    var lambda = Expression.Lambda(typeof(AddOne),add,input);
    var compiled = (AddOne)lambda.Compile();
    compiled.Method.CreateDelegate(typeof(AddOne));
}

CreateDelegate 派生类必须提供实现

你不需要调用CreateDelegate .将结果从lambda.Compile转换为AddOne就是您所需要的。

观察:

public delegate int AddOne(int input);
public int Test(AddOne f)
{
   return f(1);
}
void Main()
{
    var input = Expression.Parameter(typeof(int));
    var add = Expression.Add(input,Expression.Constant(1));
    var lambda = Expression.Lambda(typeof(AddOne),add,input);
    var compiled = (AddOne)lambda.Compile();
    Console.WriteLine(Test(compiled)); // 2
}

您可以成功调用 Test 方法,该方法接受类型 AddOne 的委托。