引发额外的异常

本文关键字:异常 | 更新日期: 2023-09-27 18:34:57

这是一个我在C#中无法弄清楚的奇怪场景:

try
{
    Call to database.
    If results from database are empty
          throw new Exception("No results");
}
catch(Exception ex)
{
    if (ex.Message.Equals("No results"))
        throw;
    else
        throw new Exception("Exception from database");
}

右边的输出应该是:Exception ("No results")

但是,目前,它不断抛出 2 个异常,即 Exception("No results")Exception("Exception from database") .

更新:我尝试将"ex"作为内部异常,因此" throw new Exception("Exception from database", ex)"。原来前任其实是'Exception("No results") .

谁能向我解释为什么会发生这种情况?

谢谢!

PS:稍微调整了一下上面的内容。希望现在更清楚。它的"投掷"而不是"回归"。对错误使用术语表示歉意。

引发额外的异常

调用数据库(或处理来自数据库的结果(时出现异常。

顺便说一句,如果您在数据库中找不到一些数据,则很少是例外情况。只需返回空集合或空集合。

Foo GetFooById(int id)
{
   try
   {
       Call to database.
       If results from database are empty
          return null;
   }
   catch(SqlException ex)
   {   
      throw new MyDataAccessException("Cannot find foo", ex);
   }
}

另一个建议 - 不要对流量控制使用例外。

我不能 100% 确定您的代码片段,但听起来您似乎有"两个"异常的原因可能是您正在重新抛出原始异常。

看看这个链接,了解C#中"throw ex"(通常的情况(和"throw"之间的区别:

http://geekswithblogs.net/sdorman/archive/2007/08/20/Difference-between-quotthrowquot-and-quotthrow-exquot-in-.NET.aspx