dotnet C# 在 finally 拋異常會發生什麼
阿新 • • 發佈:2021-06-17
如果我在一個方法的 finally 裡面丟擲異常,而在 try 裡面也丟擲,那在上層拿到的是什麼
如下面程式碼
private void F1() { try { A(); } catch (Exception e) { } } private void A() { try { throw new ArgumentException("lindexi is doubi"); } finally { throw new FileNotFoundException("lsj is doubi"); } }
請問在 F1 的 catch 裡面收到的 e 是什麼型別,會觸發幾次?
試試上面的程式碼,可以看到其實在進入 try 時,丟擲 ArgumentException 不會立刻返回到 F1 方法裡面,而是會繼續執行 finally 方法
在 finally 丟擲的 FileNotFoundException 將會替換掉 ArgumentException 拋給了 F1 方法裡面
所以答案就是在 F1 的 catch 方法,只會被觸發一次,這一次的 e 就是在 finally 丟擲的 FileNotFoundException 異常