<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 異常處理(C# 編程指南) C# 程序員可使用 [try](https://msdn.microsoft.com/zh-cn/library/0yd65esw.aspx) 塊對可能受異常影響的代碼進行分區。關聯的 [catch](https://msdn.microsoft.com/zh-cn/library/0yd65esw.aspx) 塊用于處理任何結果異常。一個包含代碼的 [finally](https://msdn.microsoft.com/zh-cn/library/zwc8s4fz.aspx) 塊,無論 **try** 塊中是否引發異常(例如,釋放在 **try** 塊中分配的資源),這些代碼都會運行。一個 **try** 塊需要一個或多個關聯的 **catch** 塊或一個 **finally** 塊,或兩者。 以下示例給出了一個 **try-catch** 語句,一個 **try-finally** 語句,和一個 **try-catch-finally** 語句。 ``` try { // Code to try goes here. } catch (SomeSpecificException ex) { // Code to handle the exception goes here. // Only catch exceptions that you know how to handle. // Never catch base class System.Exception without // rethrowing it at the end of the catch block. } ``` ``` try { // Code to try goes here. } finally { // Code to execute after the try block goes here. } ``` ``` try { // Code to try goes here. } catch (SomeSpecificException ex) { // Code to handle the exception goes here. } finally { // Code to execute after the try (and possibly catch) blocks // goes here. } ``` 不帶有 **catch** 或 **finally** 塊的 **try** 塊將導致編譯器錯誤。 ## Catch 塊 **catch** 塊可以指定要捕捉的異常的該類型。類型規范稱為“異常篩選器”。異常類型應從 [Exception](https://msdn.microsoft.com/zh-cn/library/system.exception.aspx) 派生出來。一般而言,不會將 [Exception](https://msdn.microsoft.com/zh-cn/library/system.exception.aspx) 指定為異常篩選器,除非您了解如何處理 **try** 塊中可能引發的所有異常,或者您在 **catch** 塊中包括了 [throw](https://msdn.microsoft.com/zh-cn/library/1ah5wsex.aspx) 語句。 具有不同異常篩選器的多個 **catch** 塊可以串聯在一起。多個 **catch** 數據塊的計算順序是在代碼中從頂部到底部,但是,對于所引發的每個異常,都只執行一個 **catch** 數據塊。與指定的準確類型或其基類最為匹配的第一個 **catch** 塊被執行。如果 **catch** 塊沒有指定匹配異常篩選器,則 **catch** 塊就不具有選定的篩選器(如果語句有的話)。需要將帶有最具體的(即派生程度最高的)異常類的 **catch** 塊放在最前面。 當下列條件為真時,應該捕捉異常: * 對引發異常的原因有具體的了解,并可實現特定的恢復,例如,在捕獲 [FileNotFoundException](https://msdn.microsoft.com/zh-cn/library/system.io.filenotfoundexception.aspx) 對象時提示用戶輸入新的文件名。 * 可以新建一個更具體的異常并引發該異常。 ``` int GetInt(int[] array, int index) { try { return array[index]; } catch(System.IndexOutOfRangeException e) { throw new System.ArgumentOutOfRangeException( "Parameter index is out of range."); } } ``` * 希望在將異常傳遞出去進行額外處理前部分地處理異常。在下面的示例中,**catch** 塊用于在再次引發異常之前,向錯誤日志添加條目。 ``` try { // Try to access a resource. } catch (System.UnauthorizedAccessException e) { // Call a custom error logging procedure. LogError(e); // Re-throw the error. throw; } ``` ## Finally 塊 可以使用 **finally** 塊清理在 **try** 塊中執行的操作。如果存在,**finally** 塊將在最后執行,在 **try** 塊和任何匹配 **catch** 的塊之后執行。不管是否引發異常或者是否找到與異常類型匹配的 **catch** 塊,**finally** 始終運行。 可以使用 **finally** 塊釋放資源(如文件流、數據庫連接和圖形句柄),而不用等待由運行時中的垃圾回收器來完成對象。有關更多信息,請參見[using 語句(C# 參考)](https://msdn.microsoft.com/zh-cn/library/yh598w02.aspx)。 在下面的示例中,使用 **finally** 塊關閉在 **try** 塊中打開的文件。注意,在關閉文件之前要檢查該文件句柄的狀態。如果 **try** 塊無法打開文件,則文件句柄仍具有值 **null**,并且 **finally** 塊不會嘗試關閉它。或者,如果在 **try** 塊中成功打開該文件,則 **finally** 塊將關閉打開的文件。 ``` System.IO.FileStream file = null; System.IO.FileInfo fileinfo = new System.IO.FileInfo("C:\\file.txt"); try { file = fileinfo.OpenWrite(); file.WriteByte(0xF); } finally { // Check for null because OpenWrite might have failed. if (file != null) { file.Close(); } } ``` ## C# 語言規范 有關詳細信息,請參閱 [C# 語言規范](https://msdn.microsoft.com/zh-cn/library/ms228593.aspx)。該語言規范是 C# 語法和用法的權威資料。 ## 請參閱 [C# 參考](https://msdn.microsoft.com/zh-cn/library/618ayhy6.aspx) [C# 編程指南](https://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx) [異常和異常處理(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/ms173160.aspx) [try-catch(C# 參考)](https://msdn.microsoft.com/zh-cn/library/0yd65esw.aspx) [try-finally(C# 參考)](https://msdn.microsoft.com/zh-cn/library/zwc8s4fz.aspx) [try-catch-finally(C# 參考)](https://msdn.microsoft.com/zh-cn/library/dszsf989.aspx) [using 語句(C# 參考)](https://msdn.microsoft.com/zh-cn/library/yh598w02.aspx)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看