函数调用中的C#委托

Bar*_*chs 3 c# delegates

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

   delegate void processRecord(int a, int b);
Run Code Online (Sandbox Code Playgroud)

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

   void someFunction(processRecord fcn);
Run Code Online (Sandbox Code Playgroud)

我想someFunction用匿名方法打电话,但我不能说得对:

   someFunction(new processRecord(a, b) {
       // do stuff
   });
Run Code Online (Sandbox Code Playgroud)

对于这样的事情,正确的语法是怎样的?

Ily*_*nov 6

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

someFunction(delegate (int a, int b) {
    // use a and b here
});
Run Code Online (Sandbox Code Playgroud)

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

someFunction((a, x) => Console.WriteLine(a + "; " + x));
Run Code Online (Sandbox Code Playgroud)

但是,在.NET框架已经存在泛型委托Action,因为.NET 3.5,你可以改用创建自己的.

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

void someFunction(Action<int, int> fcn) {}
Run Code Online (Sandbox Code Playgroud)

然后打电话

someFunction( (a,b) => /*use a and b here*/ );
Run Code Online (Sandbox Code Playgroud)