小编Jus*_*s G的帖子

使用 lambda 作为方法的 Delegate.CreateDelegate 会产生“方法参数长度不匹配”异常

我有一个问题,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)

.net c# mono lambda delegates

3
推荐指数
1
解决办法
1720
查看次数

标签 统计

.net ×1

c# ×1

delegates ×1

lambda ×1

mono ×1