这是一个我在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:稍微调整一下。希望现在更清楚。它的“抛出”不是“回归”。对错误使用术语表示道歉。
答案 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”之间的区别: