委托:方法名称预期错误

时间:2010-02-22 08:41:35

标签: c# delegates

我正在尝试使用以下简单的Delegate示例。根据我从中获取的一本书应该没问题,但我收到Method name expected错误。

namespace TestConsoleApp
{
    class Program
    {
        private delegate string D();

        static void Main(string[] args)
        {
            int x = 1;

            D code = new D(x.ToString());

        }
    }
}

任何帮助?

6 个答案:

答案 0 :(得分:33)

删除():

D code = new D(x.ToString);

您希望指定该方法,而不是执行

答案 1 :(得分:6)

我认为你的意思是:

D code = new D(x.ToString);

注意缺少括号。在括号打开的情况下,它是一个方法调用 - 即您试图在该行代码中执行x.ToString()。没有括号,它是一个方法组 - 一个表达式,它告诉编译器查看具有该名称的可用方法(在该上下文中),正是为了创建委托。

你正在使用哪本书?如果它显示的示例中确实有括号,您可能希望通过电子邮件发送作者(或至少查看本书的勘误表页面)。如果它是深度的C#,我会在角落里哭泣......

答案 2 :(得分:3)

您需要将方法提供给委托构造函数。

x.ToString()

不是方法,而是字符串。使用

D code = new D(x.ToString); 

答案 3 :(得分:0)

尝试从方法的末尾取出括号,传递方法,因此不需要使用括号。

答案 4 :(得分:0)

D code = new D(x.ToString);   // Note the: ()

您需要传递要在委托中执行的方法。你正在做的是传递值而不是函数的签名。

答案 5 :(得分:0)

应该是:

D code = new D(x.ToString);