定义可以接受Action或Func委托的方法的最佳方法

佐尔坦·塔玛西(ZoltánTamási)

我想介绍一种可以接收Actionor或a的方法/函数Func<T>,并且根据它得到的内容,它应该返回voidor 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());
}

或完全删除WrapActionWrapFunc直接使用

WrapFunc(action.ToFunc());    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 Func 委托中调用 Func 委托的方法

用Moq测试接受委托的方法

Action / Func的扩展方法为常规方法

将Func委托与Async方法一起使用

委托给包含模块中定义的方法

从自定义委托方法检索数据

同步接受Action参数的调用方法

定义复合主键的最佳方法

从Google提取定义的最佳方法?

如何用func委托替换Action委托以返回值

如何使用反射调用接受 Func<> 参数的方法?

接受 Func<T> 的简单超时方法不等待

以用户定义的顺序执行Func委托

模块方法未定义方法的rspec测试委托

修复未定义方法的最佳方法

用户定义的方法和__func__属性

使用类委托时,是否有方法可以覆盖委托对象的方法所使用的成员?

定义一个C#方法,该方法接受可以与方括号一起使用的任何对象

ServiceCollection不包含AddScoped的定义,找不到可以接受的扩展方法,该方法接受类型的第一个参数

将常量声明为可以重新定义的类的最佳方法是什么

接受大量参数的 VBA Sub - 解析的最佳方法

这是创建接受任何类型的集合的方法的最佳选择吗?

在自定义UITextField类中调用委托方法

在自定义UiView中的哪里设置UiTextField委托方法

ios-自定义委托方法未触发

使用自定义参数创建事件委托给方法

如何快速执行 UITableViewDataSource 等自定义委托方法?

定义为方法签名的委托不是有效的替代

Swift-调用自定义委托方法