我使用的类的方法如下:
public static T Get<T>(string key, Func<T> method)
{
//do stuff
var obj = method.Invoke();
return (T)obj
}
如果它工作得很好,我这样称呼它:
var x = Get<string>("mykey", test);
Where test是一个没有参数并返回字符串的函数。然而,一旦测试有了参数,情况就会发生变化。如果我尝试:
var x = Get<string>("mykey", test(myparam));
我得到错误"参数类型"String"不可分配给参数类型"System.Func<string>".
我知道添加(myparam)是个问题,但我不确定该如何修复。问题是库函数的编写方式,还是我试图传递参数的方式?
var x = Get<string>("mykey", () => test(myparam));
您可以像以下示例代码中那样调用它:
Get("mykey", () => test(myparam))
public static T Get<T>(string key, Func<T> method)
{
//do stuff
var obj = method.Invoke();
return (T)obj;
}
void Xyz()
{
int myparam = 0;
var x = Get("mykey", () => test(myparam)); // <string> is not needed
}
double test(int i)
{
return 0.0;
}
您需要通过传递一个lambda表达式来获取参数,该表达式不接受任何参数,并使用来自其他地方的参数调用您的函数:
var x = Get<string>("mykey", () => test(myparam));
这就是传递参数的方式。test(myparam)
的类型为String
,您需要传递一个函数,该函数返回String
。使用lambda表达式,您可以毫不费力地完成一个:
var x = Get<string>("mykey", () => test(myparam));
lambda表达式() => foo
创建一个函数,该函数在被调用时执行并返回foo
。
您需要更改Func定义来定义输入参数,因此:
Func<T,T1,T2,T3> method