-3

这是一个我在 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:稍微调整了上面的内容。希望现在更清楚。它的“抛出”不是“返回”。对错误使用术语表示歉意。

4

2 回答 2

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

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

于 2012-05-22T07:18:15.027 回答
-1

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

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

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

于 2012-05-22T07:15:17.807 回答