消除Func和Action引入的重复代码
本文关键字:代码 Func Action 消除 | 更新日期: 2023-09-27 18:24:29
有一个具有返回类型的泛型函数。
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就必须相应地进行更改。有什么方法可以消除重复的代码吗?
谢谢,Jim
你可以试试这样的东西:
void Invoke(Action<string> callback)
{
Invoke<int>(s=>{callback(s);return 0;});
}
这样,所有的逻辑都保持在Func
版本中,而Action
版本永远不应该更改。
另一种选择是创建一个ToFunc
转换例程,并让调用者有责任将其操作更改为函数:
public static Func<TIn, TResult> ToFunc<TIn, TResult>(this Action<TIn> a)
{
return input =>
{
a(input);
return default(TResult);
};
}