将具有不同签名的函数传递给另一个函数c#

时间:2016-10-27 18:41:02

标签: c# function parameters

您好我想创建一个接受函数T并调用它的泛型函数。

例如: 神奇的功能应该是这样的

 public void Test() 
 {
    InvokeFunction(Test1, "st", "sn");
    InvokeFunction(Test2, 7);
 }

public void InvokeFunction(Function f)
{ 
  f();
}

 public void Test1(string sT, string sFN)
 {
   Console.WriteLine(sT + " : " + sFN);
 }

 public string Test2(int p)
 {
    return p + "";
 }

有办法吗?如果是这样的话?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以将其作为Action执行,但您必须传递一个使用所需参数调用该方法的lambda。

public void Test() 
{
   InvokeFunction(() => Test1("st", "sn"));
}

public void InvokeFunction(Action f)
{ 
    f();
}

public void Test1(string sT, string sFN)
{
    Console.WriteLine(sT + " : " + sFN);
}

但是,如果您的方法具有您希望的返回值,则需要使用Func的单独通用方法。

public void Test() 
{
    var result = InvokeFunction(() => Test2(7));
    Console.WriteLine(result);
}

public T InvokeFunction<T>(Func<T> f)
{ 
    return f();
}

public string Test2(int p)
{
    return p + "";
}

答案 1 :(得分:0)

您的方法可能具有返回值或无效。所以,你必须有两个通用函数。

TValue InvokeFunction<TValue>(Func<TValue> func)
{
    return func();
}

void InvokeFunction(Action func)
{
    func();
}

用法,

var result = InvokeFunction(() => Test2(3));
InvokeFunction(() => Test1("p1", "p2"));