Dispose 方法中的问题异常掩盖了使用块中的其他错误

考虑以下代码块。

try
{
    using (var disposable = new MyDisposable())
    {
        throw new Exception("Couldn't perform operation.");
    }
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

class MyDisposable : IDisposable
{
    public void Dispose()
    {
        throw new Exception("Couldn't dispose successfully.");
    }
}

你可能希望在控制台上看到无法执行操作,但实际上你会看到无法成功部署。因为即使在抛出第一个异常之后仍然调用 Dispose 方法。

值得注意这一微妙之处,因为它可能掩盖了阻止对象被丢弃的真正错误并使调试变得更加困难。