我的所有方法都需要通用包装,而无需复制代码(C#)

利亚姆·克尼根(Liam Kernighan)

我有一个功能

public TOut PerformDbOperation<TIn, TOut>(Func<IDbConnection, TIn, TOut> method, TIn param1, bool withinTransaction)
{
    IDbConnection db = GetNewDbConnection();
    OpenConnection(db);
    IDbTransaction transaction = null;

    if (withinTransaction) {
        transaction = db.BeginTransaction();
    }

    try {
        TOut result = method(db, param1);
        if (withinTransaction) {
            transaction.Commit();
        }
        return result;

    }
    finally {
        if (withinTransaction) {
            transaction.Dispose();
        }
        CloseConnection(db);
    }
}

是否可以修改此函数,以便它可以包装任何方法,无论它是空的还是返回某些东西或需要多少个参数?还是每次添加具有不同数量参数的新方法时都需要编写另一个包装器?

阿卜杜

试试这个 :

public TOut PerformDbOperation<TOut>(Function<IDbConnection,TOut> method, bool withinTransaction)
{
    IDbConnection db = GetNewDbConnection();
    OpenConnection(db);
    IDbTransaction transaction = null;

    if (withinTransaction) {
        transaction = db.BeginTransaction();
    }

    try {
        TOut result = method(db);
        if (withinTransaction) {
            transaction.Commit();
        }
        return result;

    }
    finally {
        if (withinTransaction) {
            transaction.Dispose();
        }
        CloseConnection(db);
    }
}

并调用方法:

string s = PerformDbOperation((db) => yourMethode(db, param1, param2, param3));

如果您还需要传递不返回任何内容的methode,请使用Action<IDbConnection>代替Function<IDbConnection,TOut>

public void PerformDbOperation(Action<IDbConnection> method, bool withinTransaction)
{
     PerformDbOperation((db) => 
     {
          method(db);
          return 0;
     } 
     ,withinTransaction);  //this will call the other overload thanks to the 'return 0' stamtement
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

TypeScript:如何创建一个包装类,该包装类具有基类的所有方法而无需手动声明?

来自分类Dev

用额外的参数扩展所有方法,而无需声明它们

来自分类Dev

Android 活动和片段生命周期 - 我是否需要在我的代码中使用所有方法?

来自分类Dev

访问函数中声明的所有变量而无需复制代码

来自分类Dev

C#从非通用父接口调用通用接口方法而无需动态

来自分类Dev

我需要删除括号内的所有内容而无需重新导入

来自分类Dev

控制器类中所有方法的通用代码

来自分类Dev

异步 POST 方法 C# '':并非所有代码路径都返回值

来自分类Dev

当我在类方法中声明私有字符串时,C#并非所有代码路径都返回值

来自分类Dev

在 C# 中,有没有办法直接从数组创建 List 而无需复制?

来自分类Dev

递归复制所有文件,而无需替换

来自分类Dev

“不要问”,不是所有方法都无效吗?

来自分类Dev

Groovy的所有方法是否都短路?

来自分类Dev

Flask:如何为所有方法注册包装器

来自分类Dev

我的 C# 代码对所有 if 语句都进行了彻底检查,尽管它们都是错误的

来自分类Dev

C#并行读取对列表的访问而无需复制

来自分类Dev

为什么我需要在实现接口的类中实现接口的所有方法?

来自分类Dev

如果接口和抽象类都具有相同的方法,那么哪种方法最好将所有方法都覆盖到我的Java类中?

来自分类Dev

有没有一种方法可以扩展Spring Service以管理继承的实体,而无需复制代码?

来自分类Dev

并非所有代码路径都返回值以及如何在C#中显示方法

来自分类Dev

如何包装一个类,以便默认情况下所有方法都传递一个特定的额外参数?

来自分类Dev

将嵌入的结构复制到新结构中,而无需复制其所有字段

来自分类Dev

我是否需要将所有内容都放在C ++中的类中?

来自分类Dev

编写辅助方法时自动继承所有方法签名?(C#)

来自分类Dev

C#:具有不同定义的方法的通用方法/包装器

来自分类Android

我如何有2个不同的片段,实现相同的方法而无需编写两次代码?

来自分类Dev

当并非所有代码路径都返回时,C#编译器不会抱怨

来自分类Dev

C#并非所有代码路径都返回值错误

来自分类Dev

C#并非所有代码路径都返回值

Related 相关文章

  1. 1

    TypeScript:如何创建一个包装类,该包装类具有基类的所有方法而无需手动声明?

  2. 2

    用额外的参数扩展所有方法,而无需声明它们

  3. 3

    Android 活动和片段生命周期 - 我是否需要在我的代码中使用所有方法?

  4. 4

    访问函数中声明的所有变量而无需复制代码

  5. 5

    C#从非通用父接口调用通用接口方法而无需动态

  6. 6

    我需要删除括号内的所有内容而无需重新导入

  7. 7

    控制器类中所有方法的通用代码

  8. 8

    异步 POST 方法 C# '':并非所有代码路径都返回值

  9. 9

    当我在类方法中声明私有字符串时,C#并非所有代码路径都返回值

  10. 10

    在 C# 中,有没有办法直接从数组创建 List 而无需复制?

  11. 11

    递归复制所有文件,而无需替换

  12. 12

    “不要问”,不是所有方法都无效吗?

  13. 13

    Groovy的所有方法是否都短路?

  14. 14

    Flask:如何为所有方法注册包装器

  15. 15

    我的 C# 代码对所有 if 语句都进行了彻底检查,尽管它们都是错误的

  16. 16

    C#并行读取对列表的访问而无需复制

  17. 17

    为什么我需要在实现接口的类中实现接口的所有方法?

  18. 18

    如果接口和抽象类都具有相同的方法,那么哪种方法最好将所有方法都覆盖到我的Java类中?

  19. 19

    有没有一种方法可以扩展Spring Service以管理继承的实体,而无需复制代码?

  20. 20

    并非所有代码路径都返回值以及如何在C#中显示方法

  21. 21

    如何包装一个类,以便默认情况下所有方法都传递一个特定的额外参数?

  22. 22

    将嵌入的结构复制到新结构中,而无需复制其所有字段

  23. 23

    我是否需要将所有内容都放在C ++中的类中?

  24. 24

    编写辅助方法时自动继承所有方法签名?(C#)

  25. 25

    C#:具有不同定义的方法的通用方法/包装器

  26. 26

    我如何有2个不同的片段,实现相同的方法而无需编写两次代码?

  27. 27

    当并非所有代码路径都返回时,C#编译器不会抱怨

  28. 28

    C#并非所有代码路径都返回值错误

  29. 29

    C#并非所有代码路径都返回值

热门标签

归档