Использование анонимной функции с несколькими параметрами

Пример сценария.

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 ответа

Решение

Вы можете использовать дженерики и встроенные делегаты:

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

Func - это делегат, который может принимать параметры и что-то возвращать. Действие возвращает 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);

Вот способ, которым вы можете использовать функцию обратного вызова в 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 );

Дайте знать, если у вас появятся вопросы

Другие вопросы по тегам