我有一个像
这样的功能public void foo(string st; bool x)
我必须以这种方式将其作为代理传递给EventHandler:
eventhndl += foo
但是,它需要少一个参数 如何通过已经声明它必须获取的值来使代理排除参数,如(不工作方式):
eventhndl += foo(x=true)
没有出现大量的params错误?
答案 0 :(得分:3)
您可以使用lambda绑定参数,如下所示:
eventHandler += s => foo(s, true);
答案 1 :(得分:2)
简单回答:你不能
长答案:委托代表一个函数签名,因此它必须与实例指向的函数完全匹配。
要解决此问题,您可以在C#上使用旧方法获取可选参数,重载:
void myFunction(bool a, bool b)
{
}
void myFunction(bool a)
{
myFunction(a, true);
}
delegate myDelegate(bool a);
event myDelegate myEvent;
//...
myEvent += myFunction;
通过这种方式,您还可以在代码的其他位置使用重载。
或者如果您更喜欢更简洁但可读性更低的代码,那么您始终可以使用lambda:
myEvent += (a) => myFunction(a, true);