在使用FP编码的过程中会遇到这样一个问题:A函数需要传入一个Func参数来执行,后来由于某种需要,对A函数进行重载,重载后的A函数只是传入的参数由Func变成了Action其他的基本都没发生变化,这样会产生两套一样的代码,解决方案如下:
using Unit = System.ValueType;
public static class ActionToFunc
{
private static Unit Unit() => default(Unit);
public static Func<Unit> ToFunc(this Action action)
=> () => { action(); return Unit(); };
public static Func<T, Unit> ToFunc<T>(this Action<T> action)
=>(t) => { action(t);return Unit(); };
public static T DoSomething<T>(Func<T> func)
{
return func();
}
}
public class Test
{
public static T DoSomething<T>(Func<T> func)
=> ActionToFunc.DoSomething(func);
public static void DoSomething<T>(Action action)
=> ActionToFunc.DoSomething(action.ToFunc());
}
参考资料:《C#函数式编程》