我已经定义了这样一个委托:
delegate void processRecord(int a, int b);
现在我想用它来创建一个匿名方法来提供函数调用。该函数定义如下:
void someFunction(processRecord fcn);
我希望用匿名方法调用someFunction
,但我无法做对:
someFunction(new processRecord(a, b) {
// do stuff
});
这样的事情的正确语法如何?
答案 0 :(得分: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*/ );
然后致电
{{1}}
答案 1 :(得分:1)
您可以这样称呼它:
someFunction(delegate( int a, int b) {
// do stuff
});
C#编译器会发现您正在从呼叫的上下文中创建delegate processRecord
。
答案 2 :(得分:1)
答案 3 :(得分:0)
以下是一些选项,所有这些选项都有效地完成了同样的事情:
someFunction((a,b) => DoStuff());
someFunction(delegate(int a, int b){ doStuff(); });
someFunction(new processRecord((int a, int b) =>
{
doStuff(); doMoreStuff();
}));
答案 4 :(得分:0)
processRecord t = (q,w) =>
{
int n = q+w;
};
someFunction(t);