使用匿名函数取几个参数

时间:2016-06-08 08:09:32

标签: 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;
});

在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;
    });
.
.

问题

我的问题非常简单。如何在C#中使用回调函数,就像脚本一样?更准确地说,在

的第三个参数中执行该操作的正确语法是什么
public void FuncWithCallback(int param, int param2, Func callback)

它会是这样的吗?

public void FuncWithCallback(int param, int param2, Func(x, y) callback)
// beep! error!

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

2 个答案:

答案 0 :(得分:6)

您可以使用泛型和内置代理:

public void FuncWithCallback(int param, int param2, Action<int, int> callback)

Func是一个可以获取参数并返回内容的委托。 Action返回void并可以获取参数。如果您想要更明确的命名,也可以声明自己的delegate类型。

// 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);

答案 1 :(得分:0)

以下是在C#

中使用回调函数的方法

选项1

public static void FunctionWithCallBack(string a, string b, Func<string,string,string> callBackFunc)
    {
        string firstArg = a;
        string secondArg = b;
        var result = callBackFunc(firstArg, secondArg);
    }

    public static string CallBackFunctionMethod(string a, string b)
    {
        return a + " " +  b;
    }
CallBackFunction.FunctionWithCallBack("Aslam", "Shaikh", CallBackFunction.CallBackFunctionMethod);

选项2

CallBackFunction.FunctionWithCallBack("Aslam", "Shaikh", (x, y) => x + " " + y );

如果您有任何问题,请告诉我