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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 創建和引發異常(C# 編程指南) 異常用于指示在運行程序時發生了錯誤。此時將創建一個描述錯誤的異常對象,然后使用 [throw](https://msdn.microsoft.com/zh-cn/library/1ah5wsex.aspx) 關鍵字“引發”該對象。然后運行時搜索最兼容的異常處理程序。 當存在下列一種或多種情況時,程序員應引發異常: * 方法無法完成其中定義的功能。 例如,如果方法的參數具有無效值: ``` static void CopyObject(SampleClass original) { if (original == null) { throw new System.ArgumentException("Parameter cannot be null", "original"); } } ``` * 根據對象的狀態,對某個對象進行不適當的調用。 一個示例可能嘗試對只讀文件執行寫操作。在對象狀態不允許某項操作的情況下,引發 [InvalidOperationException](https://msdn.microsoft.com/zh-cn/library/system.invalidoperationexception.aspx) 的一個實例或基于此類的派生類的對象。以下為引發 [InvalidOperationException](https://msdn.microsoft.com/zh-cn/library/system.invalidoperationexception.aspx) 對象的方法的示例: ``` class ProgramLog { System.IO.FileStream logFile = null; void OpenLog(System.IO.FileInfo fileName, System.IO.FileMode mode) {} void WriteLog() { if (!this.logFile.CanWrite) { throw new System.InvalidOperationException("Logfile cannot be read-only"); } // Else write data to the log and return. } } ``` * 方法的參數導致了異常。 在此情況下,應捕獲原始異常并創建一個 [ArgumentException](https://msdn.microsoft.com/zh-cn/library/system.argumentexception.aspx) 實例。原始異常應作為 [InnerException](https://msdn.microsoft.com/zh-cn/library/system.exception.innerexception.aspx) 參數傳遞給 [ArgumentException](https://msdn.microsoft.com/zh-cn/library/system.argumentexception.aspx) 的構造函數: ``` static int GetValueFromArray(int[] array, int index) { try { return array[index]; } catch (System.IndexOutOfRangeException ex) { System.ArgumentException argEx = new System.ArgumentException("Index is out of range", "index", ex); throw argEx; } } ``` 異常包含一個名為 [StackTrace](https://msdn.microsoft.com/zh-cn/library/system.exception.stacktrace.aspx) 的屬性。此字符串包含當前調用堆棧上的方法的名稱,以及為每個方法引發異常的位置(文件名和行號)。 [StackTrace](https://msdn.microsoft.com/zh-cn/library/system.exception.stacktrace.aspx) 對象由公共語言運行時 (CLR) 從 **throw** 語句點開始自動創建,因此必須從堆棧跟蹤的開始點引發異常。 所有異常都包含一個名為 [Message](https://msdn.microsoft.com/zh-cn/library/system.exception.message.aspx) 的屬性。應該設置此字符串來解釋發生異常的原因。注意,不應將安全敏感信息放在消息文本中。除 [Message](https://msdn.microsoft.com/zh-cn/library/system.exception.message.aspx) 之外,[ArgumentException](https://msdn.microsoft.com/zh-cn/library/system.argumentexception.aspx) 還包含一個名為 [ParamName](https://msdn.microsoft.com/zh-cn/library/system.argumentexception.paramname.aspx) 的屬性,應將該屬性設置為導致引發異常的參數的名稱。對于屬性設置器,[ParamName](https://msdn.microsoft.com/zh-cn/library/system.argumentexception.paramname.aspx) 應設置為 value。 公共的受保護方法應在其無法完成預期功能時引發異常。引發的異常類應該是符合錯誤條件的最確切的可用異常。這些異常應編寫為類功能的一部分,派生類或對原始類的更新應保留相同的行為,以實現向后兼容性。 ## 引發異常時要避免的情況 下表確定了在引發異常時要避免的做法: * 不應使用異常來更改正常執行過程中的程序流程。異常只能用于報告和處理錯誤條件。 * 只能引發異常,而不能作為返回值或參數返回異常。 * 不要從自己的源代碼中有意引發 [System.Exception](https://msdn.microsoft.com/zh-cn/library/system.exception.aspx)、[System.SystemException](https://msdn.microsoft.com/zh-cn/library/system.systemexception.aspx)、[System.NullReferenceException](https://msdn.microsoft.com/zh-cn/library/system.nullreferenceexception.aspx) 或 [System.IndexOutOfRangeException](https://msdn.microsoft.com/zh-cn/library/system.indexoutofrangeexception.aspx)。 * 不要創建可在調試模式下引發但不會在發布模式下引發的異常。若要在開發階段確定運行時錯誤,請改用調試斷言。 ## 定義異常類 程序可以引發 [System](https://msdn.microsoft.com/zh-cn/library/system.aspx) 命名空間中的預定義異常類(前面注明的情況除外),或通過從 [Exception](https://msdn.microsoft.com/zh-cn/library/system.exception.aspx) 派生來創建它們自己的異常類。派生類至少應定義四個構造函數:一個是默認構造函數,一個用來設置消息屬性,一個用來設置 [Message](https://msdn.microsoft.com/zh-cn/library/system.exception.message.aspx) 屬性和 [InnerException](https://msdn.microsoft.com/zh-cn/library/system.exception.innerexception.aspx) 屬性。第四個構造函數用于序列化異常。新異常類應該可序列化。例如: ``` [Serializable()] public class InvalidDepartmentException : System.Exception { public InvalidDepartmentException() : base() { } public InvalidDepartmentException(string message) : base(message) { } public InvalidDepartmentException(string message, System.Exception inner) : base(message, inner) { } // A constructor is needed for serialization when an // exception propagates from a remoting server to the client. protected InvalidDepartmentException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) { } } ``` 僅當新屬性提供的數據有助于解決異常時,才應將其添加到異常類。如果向派生的異常類添加了新屬性,則應重寫 ToString() 以返回添加的信息。 ## C# 語言規范 有關詳細信息,請參閱 [C# 語言規范](https://msdn.microsoft.com/zh-cn/library/ms228593.aspx)。該語言規范是 C# 語法和用法的權威資料。 ## 請參閱 [C# 編程指南](https://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx) [異常和異常處理(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/ms173160.aspx) [異常層次結構](https://msdn.microsoft.com/zh-cn/library/z4c5tckx.aspx) [異常處理(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/ms173162.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>

                              哎呀哎呀视频在线观看