如何使用部分预定义的参数创建委托?

时间:2013-10-17 22:11:10

标签: c# delegates

假设我有一个委托声明,将一个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#中执行此操作?

2 个答案:

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