我有一个问题,Test1 产生“System.ArgumentException:方法参数长度不匹配”,而 Test2 和 Test3 通过良好。我需要使用反射订阅一个事件,如果我使用简单的方法,一切都会正常,但是当我进入 lambda 时,它会停止按预期工作。
调试显示所有 lambda 表达式都是“Void <>m__0(Int32)”,这是事件的正确类型,并且与“eventInfo.EventHandlerType”相同。
为什么会失败?或者也许,如何解决这个问题?
C# 是否会像 Test1 中那样向由 lambda 创建的方法添加更多参数?
::完整代码在这里:
public class A
{
public void Test1()
{
var str = "aa";
B.Subscribe(typeof(C), "myEvent", (int a) => { var any = str; }, null);
}
public void Test2()
{
B.Subscribe(typeof(C), "myEvent", (int a) => { var any = a; }, null);
}
public void Test3()
{
B.Subscribe<int>(typeof(C), "myEvent", callback, this);
}
public void callback(int a) { }
}
public static …Run Code Online (Sandbox Code Playgroud)