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.
您可以使用泛型和内置委托:
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)