c# - 有什么方法可以创建一个可能具有不同调用和返回参数对象的方法吗?

标签 c#

我正在使用这种类型的代码:

lock (l)
{
   try
   {
      var data = db2.Query<CardSetWithWordCount>(qry);
      return data;
   }
   catch (Exception ex)
   {
      db2.Rollback();
      Debug.WriteLine(ex);
      Console.WriteLine(qry);
      throw;
   }
}

或者像这样的另一个例子:

lock (l)
{
   try
   {
      var data = db2.Query<CardSetDetails>(qry);
      return data;
   }
   catch (Exception ex)
   {
      db2.Rollback();
      Debug.WriteLine(ex);
      Console.WriteLine(qry);
      throw;
   }
}

除了作为 db2.Query 返回类型的不同对象外,代码完全相同。

因为它需要很多行,所以我想用我调用并传入返回对象和 try 字符串的单一方法替换这两个 block 。但我不确定从哪里开始,因为在这种情况下返回的对象是:

  <CardSetWithWordCount>

对于我想替换的每种方法可能不同(例如)。

我可以在方法中执行此操作吗?如果可以,我将如何声明参数?

最佳答案

你可以像这样使用泛型:

T RunQuery<T>(YourDB db, string qry)
{

   lock (l)
   {
       try
       {
           T data = db.Query<T>(qry);
           return data;
       }
       catch (Exception ex)
       {
          db.Rollback();
          Debug.WriteLine(ex);
          Console.WriteLine(qry);
          throw;
       }
    }
 }

这样调用它:

YourType res=RunQuery<YourType>(db2,qry);

请查看更多信息: https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/

关于c# - 有什么方法可以创建一个可能具有不同调用和返回参数对象的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54143442/

相关文章:

c# - ASP.NET Core 5.0 MVC : CS1061 error using Html. RenderAction

c# - 使用 MARC 文件

c# - 更新大于 1GB 的文件?

c# - Silverlight 不适用于网络的不同 IP 段

c# - FxCop:异步方法的抑制消息

c# - 将文本拖到 C# 应用程序图标上以启动应用程序

c# - PayPal 快速结帐在 MVC .net 中以 html 形式返回响应

c# - WPF TreeView : Skip a Level

c# - 从 DataTable 创建 XML

c# - 如何使用 C# 删除前导零