将函数作为参数传递

本文关键字:参数传递 函数 | 更新日期: 2023-09-27 18:27:10

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

public String myMethod(Function f1,Function f2)
{
    //code
}

设f1为:

public String f1(String s1, String s2)
{
    //code
}

有办法做到这一点吗?

将函数作为参数传递

当然可以使用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的参数和返回类型不完全相同,则可能需要相应地调整方法签名。