我有以下情况:
class Program
{
static void Main(string[] args)
{
try
{
using (new Foo())
{
throw new Exception("Inside using block");
}
}
catch (Exception e)
{
}
}
}
public class Foo : IDisposable
{
public void Dispose()
{
throw new Exception("Inside dispose");
}
}
以"Inside using block"
的{{1}}方法获取抛出的异常 - Dispose
- 并使其成为Foo
InnerException
Exception
?
修改
例如:
Inside dispose
答案 0 :(得分:4)
根据框架设计指南(Cwalina,Abrams),第9.3节:
避免在Dispose(bool)中抛出异常,除非在包含进程已损坏的严重情况下。
如果Dispose可能引发异常,则最终阻止清除逻辑将不会执行。要解决这个问题,用户需要在try块中包含对Dispose的每次调用(在finally块中!),这会导致非常复杂的清理处理程序。如果执行Dispose(bool)方法,如果disposing为false,则不要抛出异常。
同样来自第9.3节:
避免使类型最终化。仔细考虑您认为需要终结器的任何情况。从性能和代码复杂性的角度来看,与终结器实例相关的实际成本。"