【问题标题】:How to create delegate with partially predefined arguments?如何使用部分预定义的参数创建委托?
【发布时间】:2013-10-18 07:01:57
【问题描述】:

假设我有一个以一个 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# 中做到这一点?

【问题讨论】:

标签: c# delegates


【解决方案1】:

您可以使用lambda。由于可以推断出类型,所以不需要显式地说new MyDelegate(...)

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

【讨论】:

    【解决方案2】:

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

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

    由于_myDelegateMyDelegate 类型,你也可以直接给它赋值:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      相关资源
      最近更新 更多