我已经定义了这样一个委托:
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)
对于这样的事情,正确的语法是怎样的?
声明使用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)