如何构建一个返回具有约束参数的操作的方法?

时间:2015-03-13 22:17:22

标签: c# generics delegates anonymous-function

我有一个常见的封装,我一直在我的控制器中用来处理警报消息传递,异常和错误记录。这是一个简单的版本:

private void ActionHelper(Action<SpecificDbContext> DatabaseActions)
{
    try {
        DatabaseActions(db);
    }
    catch (Exception ex) {
        // error handling
    }
}

这使我可以简单地在匿名函数中定义数据库交互并传递它,并处理所有其他内容。我必须在每个控制器上创建这个ActionHelper,因为它们每个都使用不同的DbContext - 我想要概括它。

我想要的是一种方法,我可以传递类型(实现DbContext)并让它返回上面的方法。我想签名看起来像这样:

public Action<T where T : DbContext> Builder(Type type)

我会用这样的东西:

Action<SpecificDbContext> ActionHelper = Builder(typeof(SpecificDbContext));

我应该如何构建返回操作的方法?

1 个答案:

答案 0 :(得分:1)

我怀疑你只是想要:

public Action<T> Builder<T>() where T : DbContext

然后你可以把它称为:

Action<SpecificDbContext> actionHelper = Builder<SpecificDbContext>();

您不需要type参数,因为您可以使用typeof(T)方法。但是:

  • 您需要将其设为通用方法,这意味着将type参数放在方法名称
  • 之后
  • 与Java不同,约束是在与类型参数相同的地方指定的,在C#中,约束在类或方法声明的末尾出现