抛出额外的异常

时间:2012-05-22 07:08:48

标签: c# exception

这是一个我在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)'。事实证明,ex实际上是'Exception("No results")

任何人都可以向我解释为什么会这样吗?

谢谢!

PS:稍微调整一下。希望现在更清楚。它的“抛出”不是“回归”。对错误使用术语表示道歉。

2 个答案:

答案 0 :(得分:1)

调用数据库时(或处理数据库结果时)有异常。

顺便说一句,如果你在数据库中找不到某些数据,那么这种情况很少见。只需返回null或空集合。

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);
   }
}

另一个建议 - 不要使用异常进行流量控制。

答案 1 :(得分:-1)

我不是100%肯定你的代码片段,但听起来你似乎有“两个”例外的原因可能是你重新抛出原始的。

看一下这个链接,了解C#在“throw ex”(通常情况)和“throw”之间的区别:

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