将函数作为参数传递[重复]

Posted

技术标签:

【中文标题】将函数作为参数传递[重复]【英文标题】:Passing a function as parameter [duplicate] 【发布时间】:2013-08-13 03:59:33 【问题描述】:

我需要一种在 c# 中定义方法的方法,如下所示:

public String myMethod(Function f1,Function f2)

    //code

设 f1 为:

public String f1(String s1, String s2)

    //code

有什么办法吗?

【问题讨论】:

C# Delegates, Anonymous Methods, and Lambda Expressions 这能回答你的问题吗? Pass Method as Parameter using C# 【参考方案1】:

当然可以使用Func<T1, T2, TResult> 委托:

public String myMethod(
    Func<string, string, string> f1,
    Func<string, string, string> f2)

    //code

这个委托定义了一个函数,它接受两个字符串参数并返回一个字符串。它有许多表亲来定义采用不同数量参数的函数。要使用其他方法调用myMethod,只需传入方法名称即可,例如:

public String doSomething(String s1, String s2)  ... 
public String doSomethingElse(String s1, String s2)  ... 

public String myMethod(
    Func<string, string, string> f1,
    Func<string, string, string> f2)

    //code
    string result1 = f1("foo", "bar");
    string result2 = f2("bar", "baz");
    //code

...

myMethod(doSomething, doSomethingElse);

当然,如果f2的参数和返回类型不完全相同,你可能需要相应地调整方法签名。

【讨论】:

另外:当你想执行f1和f2时,只需要作为方法调用即可。字符串结果 = f1("first", "second"); 这是否意味着我必须直呼他们的名字(Jeroen van Langen)? @Babak.Abad 我提供了一个示例,说明如何将f1f2 作为函数调用。 我正在寻找这个答案大约三天,谢谢! 如果您的方法返回 void,请使用 Action 而不是 Func (docs.microsoft.com/en-us/dotnet/api/…)

以上是关于将函数作为参数传递[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将函数作为参数传递[重复]

C#将函数作为参数传递[重复]

在函数c ++中将变量作为默认参数传递[重复]

如何将constexpr作为函数参数传递c ++ [重复]

在函数中传递多个html元素作为参数[重复]

无法使用双指针作为函数参数传递二维数组[重复]