【问题标题】:How to pass a function with parameters to a function? [duplicate]如何将带参数的函数传递给函数? [复制]
【发布时间】:2020-02-21 00:00:50
【问题描述】:

我想做这样的事情

int x = 2;
int y = 3;

int performAction(int var1, int var2) {
    return var1 + var2;
}

//accepts function with parameters as parameter
void runLater(performAction(x, y));

x 和 y 的值可能会在 performAction 运行之前发生变化。

【问题讨论】:

  • 提示。搜索以下术语:方法指针/委托/Func
  • 代表是您正在寻找的机器人。 |从技术上讲,您还可以创建一个接口,编写一个实现它的具体类,创建一个实例,然后将其交给它。但是你有代表,所以这只是过于复杂。我只是为了完整性而提到它。
  • void runLater(Action act); 用法:runLater(() => performAction(x, y));。你传入了一个匿名函数,该函数引用了xy
  • 我建议仔细看看this answer
  • @MongZhu 这正是我所需要的。谢谢

标签: c# function oop methods


【解决方案1】:

签名将是:

void runLater(Func<int, int, int> functionParameter);

您可以完全按照上面的问题来称呼它;

runLater(performAction);

如果您需要执行runLater之外提供的参数:

// signature would be:
void runLater(Func<int> functionParameter);
// invocation like:
var x = 2;
var y = 3;
runLater(delegate () { return performAction(x, y);});
// or
runLater(() => performAction(x, y));

【讨论】:

  • 您将 runLater 定义为接受一个接受两个参数的函数,但您将它传递给一个不接受任何参数的函数。然后你将传递给 runLater 一个调用 runLater 的委托。
  • 问题中定义的 performAction 是一个接受两个整数并返回一个整数的函数 (Func&lt;int, int, int&gt;)
  • 请修正您的代码,以便它可以被符合标准的 C# 编译器编译。
  • 对..我打错字了。
  • 感谢您的更新。您可以删除 runLater(Func&lt;int, int, int&gt; functionParameter),因为它未使用。 OP 无需花时间思考它的用途。
猜你喜欢
  • 1970-01-01
  • 2020-01-06
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 2016-06-29
  • 2019-03-05
  • 2019-03-29
相关资源
最近更新 更多