1

假设我有一个委托声明,以一个 int 作为参数:

public delegate void MyDelegate(int i);
private MyDelegate _myDelegate = null;

我有一些函数,它接受一个字符串和一个 int 作为参数

private MyFunc(string s, int i){
    ...
}

现在我想从 MyFunc 创建一个 MyDelegate,方法是预先指定字符串参数,但保持 int 参数打开。就像是:

_myDelegate = new MyDelegate(MyFunc("Hello", ?));

而 ? 将标记调用 _myDelegate 时需要传递的仍然打开的参数。我知道这在其他语言中是可能的(例如, ? 语法来自 Eiffel 代理)。

如何在 C# 中做到这一点?

4

2 回答 2

6

您可以使用lambda。由于可以推断类型,因此您无需明确表示new MyDelegate(...).

_myDelegate = i => MyFunc("Hello", i);
于 2013-10-17T22:15:56.723 回答
3

您可以使用 lambda 表达式来实现这种部分函数应用程序:

_myDelegate = new MyDelegate(i => MyFunc("Hello", i));

既然_myDelegate是 type MyDelegate,你也可以直接给它赋值:

_myDelegate = i => MyFunc("Hello", i);
于 2013-10-17T22:16:31.573 回答