我正在使用一个类似于以下方法的类:
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);
其中test是一个没有参数并返回字符串的函数。但是,只要测试有参数,事情就会中断。如果我尝试:
var x = Get<string>("mykey", test(myparam));
我收到错误“Argument type”String“不能分配给参数类型”System.Func&lt; string&gt;“。
我知道(myparam)的添加是问题所在,但我不确定应该如何修复它。问题是如何编写库的函数或者我是如何传递参数的?
答案 0 :(得分:2)
var x = Get<string>("mykey", () => test(myparam));
答案 1 :(得分:1)
您需要curry参数,方法是传递一个不带参数的lambda表达式,并使用其他地方的参数调用函数:
var x = Get<string>("mykey", () => test(myparam));
答案 2 :(得分:1)
您可以像下面的示例代码一样调用它:
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;
}
答案 3 :(得分:0)
这是你传递参数的方式。 test(myparam)
的类型为String
,您需要传递一个函数,它会返回String
。您可以使用lambda表达式轻松地创建一个:
var x = Get<string>("mykey", () => test(myparam));
lambda表达式() => foo
创建一个函数,在调用时,执行并返回foo
。
答案 4 :(得分:-1)
您需要更改Func定义以定义输入参数:
Func<T,T1,T2,T3> method