假设我有一个委托声明,将一个int作为参数:
public delegate void MyDelegate(int i);
private MyDelegate _myDelegate = null;
我有一些函数,它接受一个字符串和一个int作为参数
private MyFunc(string s, int i){
...
}
现在我想通过预先指定字符串参数但保持int参数打开来从MyFunc创建MyDelegate。类似的东西:
_myDelegate = new MyDelegate(MyFunc("Hello", ?));
而?将标记在调用_myDelegate时需要传递的仍然打开的参数。我知道这在其他语言中是可行的(例如,?语法来自Eiffel代理)。
如何在C#中执行此操作?
答案 0 :(得分:6)
您可以使用lambda。由于可以推断出类型,因此您无需明确说出new MyDelegate(...)
。
_myDelegate = i => MyFunc("Hello", i);
答案 1 :(得分:3)
您可以使用lambda表达式来实现这种部分函数应用程序:
_myDelegate = new MyDelegate(i => MyFunc("Hello", i));
由于_myDelegate
的类型为MyDelegate
,您也可以直接为其指定lambda:
_myDelegate = i => MyFunc("Hello", i);