使用排除参数

时间:2017-01-24 18:11:03

标签: c#

我有一个像

这样的功能
public void foo(string st; bool x)

我必须以这种方式将其作为代理传递给EventHandler:

eventhndl += foo

但是,它需要少一个参数 如何通过已经声明它必须获取的值来使代理排除参数,如(不工作方式):

eventhndl += foo(x=true)

没有出现大量的params错误?

2 个答案:

答案 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);