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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 如何:使用 finally 執行清理代碼(C# 編程指南) **finally** 語句的目的是確保即使在引發異常的情況下也能立即進行必要的對象(通常是保存外部資源的對象)清理。此類清理功能的一個示例是在使用后立即對 [FileStream](https://msdn.microsoft.com/zh-cn/library/system.io.filestream.aspx) 調用 [Close](https://msdn.microsoft.com/zh-cn/library/system.io.stream.close.aspx),而不是等待公共語言運行時對該對象進行垃圾回收,如下所示: ``` static void CodeWithoutCleanup() { System.IO.FileStream file = null; System.IO.FileInfo fileInfo = new System.IO.FileInfo("C:\\file.txt"); file = fileInfo.OpenWrite(); file.WriteByte(0xF); file.Close(); } ``` 為了將上面的代碼轉換為 **try-catch-finally** 語句,需要將清理代碼與工作代碼分開,如下所示。 ``` static void CodeWithCleanup() { System.IO.FileStream file = null; System.IO.FileInfo fileInfo = null; try { fileInfo = new System.IO.FileInfo("C:\\file.txt"); file = fileInfo.OpenWrite(); file.WriteByte(0xF); } catch(System.UnauthorizedAccessException e) { System.Console.WriteLine(e.Message); } finally { if (file != null) { file.Close(); } } } ``` 因為在 OpenWrite() 調用前,**try** 塊內隨時都有可能發生異常,OpenWrite() 調用本身也有可能失敗,所以我們無法保證該文件在我們嘗試關閉它時處于打開狀態。 **finally** 塊添加了一項檢查,以確保在調用 [Close](https://msdn.microsoft.com/zh-cn/library/system.io.stream.close.aspx) 方法前,[FileStream](https://msdn.microsoft.com/zh-cn/library/system.io.filestream.aspx) 對象不為 **null**。如果沒有 **null** 檢查,**finally** 塊可能引發自身的 [NullReferenceException](https://msdn.microsoft.com/zh-cn/library/system.nullreferenceexception.aspx),但是應當盡可能避免在 **finally** 塊中引發異常。 在 **finally** 塊中關閉數據庫連接是另一個不錯的選擇。因為有時候數據庫服務器允許的連接數是有限的,所以應盡快關閉數據庫連接。在由于引發了異常而無法關閉連接的情況下,使用 **finally** 塊也是比等待垃圾回收更好的一種選擇。 ## 請參閱 [C# 編程指南](https://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx) [異常和異常處理(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/ms173160.aspx) [異常處理(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/ms173162.aspx) [using 語句(C# 參考)](https://msdn.microsoft.com/zh-cn/library/yh598w02.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)
                  <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>

                              哎呀哎呀视频在线观看