我想介绍一种可以接收Action
or或a的方法/函数Func<T>
,并且根据它得到的内容,它应该返回void
or T
。
现在,我必须用两个几乎相同的版本编写此方法。
public void WrapAction(Action action) {
// do something...
action();
// do something more...
}
public T WrapFunc(Func<T> func) {
// do something...
var result = func();
// do something more...
return result;
}
有什么技术可以避免这种重复?
相比之下,例如在Javascript中,我可以灵活地接受任何类型的函数(可能是void
),并只返回它的结果,如果是void
,则它将返回undefined
。但是用C#不能写类似的东西Func<void>
。
什么使一个Func<bool>
通过扩展方法实现的动作,降低了包装处理Func<T>
而已。
public static class ActionExtensions
{
public static Func<bool> ToFunc(this Action action)
{
return () =>
{
action();
return true;
};
}
}
然后WrapAction
可以简单地致电WrapFunc
。
public void WrapAction(Action action)
{
WrapFunc(action.ToFunc());
}
或完全删除WrapAction
并WrapFunc
直接使用。
WrapFunc(action.ToFunc());
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句