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
.将结果从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
的委托。