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 方法。

值得注意這一微妙之處,因為它可能掩蓋了阻止物件被丟棄的真正錯誤並使除錯變得更加困難。