尝试
{
抛出新的例外(“测试”);
}
最后
{
//检查异常????
//日志(例外);
}
有没有办法从最终的运行时间中获取异常?
我不能使用捕获: - )
感谢您的回答 我不能使用catch,因为它实际上不是我的代码(重构) 我们想要包装一段代码:
using(CriticalFlow(policy))
{
//Not my code.
flow.Succeeded();
}
在CriticalFlow finally块中,我们需要检查异常,如果没有调用则成功,并以任何方式提醒任何人。
我希望它能为原来的问题提供一些启示。
再次感谢。
答案 0 :(得分:7)
Exception helper;
try
{
}
catch (Exception ex)
{
helper = ex;
}
finally
{
if (helper != null)
{
process helper
}
}
答案 1 :(得分:4)
当你到达finally块时,异常实例已经超出范围。使用try块的整个想法是有一个位置来检查异常。如果你不想抓住它,你可以做的就是简单地重新抛出它:
try
{
// some exception is thrown
}
catch (Exception ex)
{
// do some logging or so
throw;
}
答案 2 :(得分:2)
Exception e = null;
try
{
e = new Exception("test");
throw e;
}
finally
{
// Examine e
}
但你不能“正常”做任何事情。
你能用记录方法包装整个东西吗?代表们可以在这里提供帮助,例如
LogExceptions(delegate
{
try
{
throw new Exception("test"0;
}
finally
{
// Not logged yet
}
}
);
LogExceptions
只会尝试指定的操作,捕获任何异常,记录并重新抛出。
答案 3 :(得分:0)
不,异常会在堆栈中抛出,直到它被一个catch块捕获。
为什么你不能使用捕获? :? 您可以捕获想要用它执行的异常,并在需要时重新抛出它。
答案 4 :(得分:0)
我很抱歉,但这是不可能的......
答案 5 :(得分:0)
不,您无法直接访问finally
块中的异常对象。但是,您可以做的是在catch
块中捕获异常,将其存储在局部变量中,然后使用throw;
语句重新抛出它。
答案 6 :(得分:0)
此代码可以澄清我们的意图:
using (CriticalFlow cf = new CriticalFlow())
{
// code which can throws
cf.Completed();
}
public class CriticalFlow : IDisposable
{
private bool _completed = false;
public void Completed()
{
this._completed = true;
}
#region IDisposable Members
public void Dispose()
{
if (this._completed == false)
{
// can i peek the exception at this point?
}
}
#endregion
}