3

我已经定义了一个这样的委托:

   delegate void processRecord(int a, int b);

现在我想用它来创建一个匿名方法来提供函数调用。函数定义如下:

   void someFunction(processRecord fcn);

我想someFunction用匿名方法调用,但这我做错了:

   someFunction(new processRecord(a, b) {
       // do stuff
   });

像这样的东西的正确语法是怎样的?

4

5 回答 5

6

使用参数声明对方法的调用的正确语法processRecord是:

someFunction(delegate (int a, int b) {
    // use a and b here
});

您可以利用 lambda 语法调用您的someFunction, 因为processRecord与 兼容Action<int,int>,如下所示:

someFunction((a, x) => Console.WriteLine(a + "; " + x));

但是在 .net 框架中已经存在通用委托,Action因为.NET 3.5您可以使用它而不是创建自己的委托。

因此,您可以简单地将函数定义为

void someFunction(Action<int, int> fcn) {}

然后打电话

someFunction( (a,b) => /*use a and b here*/ );
于 2013-01-10T15:50:43.810 回答
1

你可以这样称呼它:

someFunction(delegate( int a, int b) {
   // do stuff
});

C# 编译器会发现你是delegate processRecord从调用的上下文中进行的。

于 2013-01-10T15:50:37.733 回答
1

如果你在你的中使用 deletegate,你可以使用它 someFunction

   someFunction(delegate( int a, int b) {
       // do some stuff
    });

这是一个DEMO.

于 2013-01-10T15:51:39.450 回答
0

以下是一些选项,所有这些选项都有效地做同样的事情:

someFunction((a,b) => DoStuff());

someFunction(delegate(int a, int b){ doStuff(); });

someFunction(new processRecord((int a, int b) => 
{
    doStuff(); doMoreStuff(); 
}));
于 2013-01-10T15:51:31.343 回答
0
processRecord t = (q,w) =>
        {
            int n = q+w;
        };
        someFunction(t);
于 2013-01-10T15:52:27.317 回答