C# 为什么没有参数的委托要编译?

C# 为什么没有参数的委托要编译?,c#,delegates,C#,Delegates,我不明白为什么会这样: private delegate int MyDelegate(int p1, int p2); private void testDelegate() { MyDelegate imp = delegate { return 1; }; } MyDelegate应该是一个指针,指向一个接受两个int参数并返回另一个int的方法,对吗?为什么允许我分配一个不带参数

我不明白为什么会这样:

    private delegate int MyDelegate(int p1, int p2);

    private void testDelegate()
    {
        MyDelegate imp = delegate 
        {
            return 1;
        };
    }
MyDelegate应该是一个指针,指向一个接受两个int参数并返回另一个int的方法,对吗?为什么允许我分配一个不带参数的方法

有趣的是,这些都没有编译(正如我所预料的,它抱怨签名不匹配)

谢谢你的帮助


Ryan

在第一个示例中,编译器可以很容易地看到没有使用任何参数,并替换一些假人


这看起来像是一个设计决策,从.NET 1中指定所有内容,到.NET 2中的匿名方法,再到.NET 3中的lambdas,如果委托不需要参数,那么您的第一个示例就是简写语法。如果您甚至需要其中一个,那么您需要提供全部,这就是第二个示例的第一部分无法编译的原因。

非常感谢您的回答;这很有道理。我将上面的一个标记为“正确”,只是因为它首先到达那里。非常感谢。
    private void testDelegate()
    {
        // Missing param
        MyDelegate imp = delegate(int p1)
        {
            return 1;
        };

        // Wrong return type
        MyDelegate imp2 = delegate(int p1, int p2)
        {
            return "String";
        };
    }