有一个返回类型的泛型函数。
TResult Invoke<TResult>(Func<string, TResult> callback)
{
string message = Generate_some_string();
return callback(message);
}
还有类似的没有返回类型,因为没有Func。
void Invoke(Action<string> callback)
{
string message = Generate_some_string();
callback(message);
}
但这些是重复的代码。一旦Invoke发生更改,就必须相应地更改Invoke。有没有办法消除重复的代码?
谢谢, 吉姆
答案 0 :(得分:1)
您可以尝试这样的事情:
void Invoke(Action<string> callback)
{
Invoke<int>(s=>{callback(s);return 0;});
}
这样,您的所有逻辑都保留在Func
版本中,您的Action
版本永远不必更改。
另一种选择是创建一个ToFunc
转换例程,并将责任放在您的调用者身上,将其操作更改为func:
public static Func<TIn, TResult> ToFunc<TIn, TResult>(this Action<TIn> a)
{
return input =>
{
a(input);
return default(TResult);
};
}