给定以下方法的MethodInfo
public class MyEffects
{
public Task Test(object action, IDispatcher dispatcher)
{
return Task.CompletedTask;
}
}
为什么以下 CreateDelegate
代码会抛出 System.ArgumentException:方法参数不兼容
?
Delegate.CreateDelegate(
type: typeof(Func<object, IDispatcher, Task>),
method: discoveredEffect.MethodInfo);
这也是如此
Delegate.CreateDelegate(
type: typeof(Func<object, object, IDispatcher, Task>),
method: discoveredEffect.MethodInfo);
最佳答案
由于您想要创建委托(delegate)给非静态方法,因此您必须使用 CreateDelegate(Type, Object, MethodInfo)
提供目标过载:
using System;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
var method = typeof(MyEffects).GetMethod("Test");
var obj = new MyEffects();
var del = Delegate.CreateDelegate(typeof(Func<object, IDispatcher, Task>), obj, method);
Console.WriteLine(del);
}
}
public class MyEffects
{
public Task Test(object action, IDispatcher dispatcher)
{
return Task.CompletedTask;
}
}
public interface IDispatcher {}
返回
System.Func`3[System.Object,IDispatcher,System.Threading.Tasks.Task]
关于c# - Delegate.CreateDelegate - 方法参数不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57938921/