首页 > 解决方案 > 匿名方法不再省略参数?

问题描述

除了与他们一起工作了一年多之外,我一直在研究关于代表的报告已经有一段时间了。

查找有关 C# 2.0 中使用的匿名方法和 C# 中的 lambda 表达式之间差异的一些信息,我阅读了一些关于 2.0 匿名方法提供的 lambda 不提供的功能:它们可以省略参数列表。

在对此进行一些研究之后,我尝试在运行最新版本 C# 的个人 IDE 上对此进行测试,发现当我尝试使用它们为我的委托类型分配一个不带任何参数的匿名方法时,我得到一个错误:

委托 Test.MyHelloDelegate 不接受 0 个参数

class TestClass
{
        public delegate void MyHelloDelegate (string s);
        MyHelloDelegate Hello = delegate () { Console.WriteLine("Hello from delegate"); };

        private void CallHello ()
        {
            Hello("dummy");
        }
}

我自己的假设是它已被修补,因为无论如何人们只会使用 lambda,但我确实需要一些证据,因为我将把它放在我的报告中。很想知道是否有人知道这是怎么回事。

标签: c#delegates

解决方案


是的,因为您附加的匿名方法不接受输入参数。将其更改为

public delegate void MyHelloDelegate (string s);
MyHelloDelegate Hello = delegate(string s) { Console.WriteLine("Hello from delegate " + s); };

如果您不想传递任何参数,请考虑使用以下语法

MyHelloDelegate Hello = delegate { Console.WriteLine("Hello from delegate "); };

推荐阅读