引发额外的异常
本文关键字:异常 | 更新日期: 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