使用匿名函数取几个参数

hin*_*531 0 c# lambda anonymous-function

脚本示例.

function TakeCallback(param, param2, callback) {
     var a = param;
     var b = param2;
     callback(a, b);
}

.... some context ...
TakeCallback("A", "B", function(one, two) {
    var scopeA = one;
    var scopeB = two;
});
Run Code Online (Sandbox Code Playgroud)

在C#中

public void FuncWithCallback(int param, int param2, Func callback) 
{
    int myScope = param;
    int myScope2 = param2;

    callback(myScope, myScope2);
}

.... some context ....

.
.
    FuncWithCallBack(10, 100, (x, y) => {
        int AnotherScope = x;
        int AnotherScope2 = y;
    });
.
.
Run Code Online (Sandbox Code Playgroud)

我的问题非常简单.如何在C#中使用回调函数,就像脚本一样?更准确地说,在第三个参数中执行该操作的正确语法是什么

public void FuncWithCallback(int param, int param2, Func callback)
Run Code Online (Sandbox Code Playgroud)

会是这样的吗?

public void FuncWithCallback(int param, int param2, Func(x, y) callback)
// beep! error!
Run Code Online (Sandbox Code Playgroud)

如果有多种选择,请尽可能多地告诉我.我准备学习了:D.

Xar*_*ugh 6

您可以使用泛型和内置委托:

public void FuncWithCallback(int param, int param2, Action<int, int> callback)
Run Code Online (Sandbox Code Playgroud)

Func是一个委托,可以获取参数并返回一些东西.Action返回void并且可以获取参数.如果您想要更明确的命名,也可以声明自己的委托类型.

// Action
delegate void MyDelegate();

// Action<int, int>
delegate void MyDelegate2(int param1, int param2);

// Func<string>
delegate string MyDelegate3();

// Func<int, int, string>
delegate string MyDelegate4(int param1, int param2);
Run Code Online (Sandbox Code Playgroud)