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 異常

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章