【问题标题】:Anonymous methods not omitting parameters anymore?匿名方法不再省略参数?
【发布时间】:2019-04-07 22:01:36
【问题描述】:

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

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

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

Delegate 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,但我确实需要一些证据,因为我将把它放在我的报告中。很想知道是否有人知道这是怎么回事。

【问题讨论】:

  • 没有任何改变。您根本没有使用无参数语法。更改为 delegate { Console.WriteLine("Hello from delegate"); } 以查看您询问的行为。您的困难是基于您的代码中的一个微不足道的印刷(语法)错误。

标签: c# delegates


【解决方案1】:

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

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 "); };

【讨论】:

猜你喜欢
  • 2014-05-20
  • 2012-03-08
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 2015-03-30
  • 2018-05-28
相关资源
最近更新 更多