1. 程式人生 > 其它 >dotnet C# 在 finally 拋異常會發生什麼

dotnet C# 在 finally 拋異常會發生什麼

如果我在一個方法的 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 異常