【发布时间】:2017-10-17 15:55:34
【问题描述】:
class Program
{
static void Main(string[] args)
{
try
{
using (var ss = new extest()) {
throw new Exception("Exception1");
}
}
catch(Exception ex)
{
System.Console.WriteLine(ex.Message);
}
}
}
class extest : IDisposable
{
public void Dispose()
{
throw new Exception("Exception2");
}
}
运行代码结果为“Exception2”, 所以我想知道如何捕获两个异常,或者只捕获一个 Exception1。 我的项目有上千个这样的使用,不加try,但是extest的Dispose只有一个地方,希望能知道Dispose之前抛出了什么异常。
谢谢
【问题讨论】:
-
我想了解你为什么要同时抓住这两个?您将如何根据其他例外情况改变您的行为。您似乎应该在 using 语句中移动 try catch 块。
-
仅供参考,在
Dispose中抛出异常是个坏主意。但是要同时捕获两者,您需要在using中添加另一个try-catch。 -
即使是异常过滤器 (stackoverflow.com/questions/4268223/c-sharp-exception-filter) 也看不到内部的 :(
-
您拒绝以下答案,因为它们没有告诉您您想听什么,但事实是您想要做的是不可能。您可以访问待处理异常的唯一位置是在
catch块内。在其他任何地方访问异常都需要在抛出异常或捕获异常时保存该异常。 C# 中没有GetPendingException方法,您可以随意调用它。所以你有两个潜在的解决方案,这两个都需要你改变你的using块。抱歉,这就是你所在的位置。 -
在我的项目中,业务逻辑在使用中,DataBase事务回滚在Dispose中。