最近,我在研究一些关于对象未处理的棘手错误。
我在代码中发现了一些模式。有人报告说一些m_foo没有被处理,而似乎所有SomeClass的实例都已经被处理了。
public class SomeClass: IDisposable
{
void Dispose()
{
if (m_foo != null)
{
m_foo.Dispose();
}
if (m_bar != null)
{
m_bar.Dispose();
}
}
private Foo m_foo;
private Bar m_bar;
}
我怀疑 Foo.Dispose 可能会抛出异常,因此以下代码不会被执行,所以 m_bar 没有被处理。
由于 Foo/Bar 可能来自第三方,所以不能保证不会抛出异常。
如果只是将所有的 Dispose 调用都包装在 try-catch 块中,那么代码就会变得笨拙。
如何处理这种情况是最佳实践?