您好我想创建一个接受函数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 + "";
}
有办法吗?如果是这样的话?
谢谢!
答案 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"));