有没有办法创建一个方法,使得该方法可以具有不同的调用和返回参数对象?

4

我正在使用以下代码:

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字符串。但我不确定从何处开始,因为返回的对象在这种情况下是:

  <CardSetWithWordCount>

每种方法可能会有不同的(例如 )差异,我希望进行替换。

是否可以在一个方法中实现这种替换,如果可以,如何声明参数?


3
你可以利用泛型方法 - Tobias Tengler
6
这段代码有问题。在数据库方法周围加上代码锁并不常见,可能存在潜在的问题。 - Mitch Wheat
2
@KunalMukherjee 我认为他所说的“代码中的不同变化”是指类型参数的变化。如果他的问题不够清晰,那不是我的错。我只是假设他最有可能想要什么。 - Tobias Tengler
1
@Alan2,你所说的不同变体是指不同的签名还是不同的实现方式? - Kunal Mukherjee
3
对于SQLite调用,启用数据库的WAL模式并像平常一样使用事务不就足够了吗?(虽然我不想引发关于这个问题的完整讨论,只是想让你单独研究一下) - Lasse V. Karlsen
显示剩余5条评论
2个回答

4
您可以像这样使用泛型:
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);

请点击以下链接获取更多关于IT技术方面的信息: https://learn.microsoft.com/zh-cn/dotnet/csharp/programming-guide/generics/


你能展示给我如何调用这个吗?谢谢。 - Alan2
2
运行查询<YourType>(db,qry) - Prodigle

0

将一个类型参数作为函数参数传递,然后在db2.Query中传入该类型。


你能举个例子说明你的意思吗? - Alan2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接