C#-異常處理(十四)

来源:https://www.cnblogs.com/tynam/archive/2018/09/26/9709633.html
-Advertisement-
Play Games

概念 異常處理是指程式在運行過程中,發生錯誤會導致程式退出,這種錯誤,就叫做異常 但並不是所有的錯誤都是異常 而處理這種錯誤,稱為異常處理 異常處理實際是不斷去發掘異常、修改異常,使程式更穩定 異常處理主要表現在四個方面: 程式開發前:儘可能的想到會發生的錯誤,標註怎麼處理應對 程式開發中:儘量暴露 ...



概念
  異常處理是指程式在運行過程中,發生錯誤會導致程式退出,這種錯誤,就叫做異常
  但並不是所有的錯誤都是異常
  而處理這種錯誤,稱為異常處理
  異常處理實際是不斷去發掘異常、修改異常,使程式更穩定
  異常處理主要表現在四個方面:
    程式開發前:儘可能的想到會發生的錯誤,標註怎麼處理應對
    程式開發中:儘量暴露程式的問題,解決這些可能的異常
    系統發佈後:儘可能的解決隱藏的或測試人員未測試到的程式問題
    發生異常時:異常代碼轉化成了友好提示顯示給用戶


異常分類
  編譯錯誤
    大小寫混淆
    數據類型與變數類型不符
    使用未聲明的變數

  運行錯誤
    數組下標越界
    除數為零
    其他運行錯誤

  邏輯錯誤
    超出數據類型的取值範圍
    語句體忘記加大括弧
    其他邏輯性錯誤


異常處理操作
  C#中異常處理時建立在四個關鍵詞之上:try、catch、finally 和 throw。
  try:一個 try 塊標識了一個將被激活的特定的異常的代碼塊。後跟一個或多個 catch 塊
  catch:程式通過異常處理程式捕獲異常。catch 關鍵字表示異常的捕獲
  finally:用於執行給定的語句,不管異常是否被拋出都會執行
  throw:當問題出現時,程式拋出一個異常。使用 throw 關鍵字來完成

  異常語句格式

 1 try
 2 
 3 {
 4 
 5 // 引起異常的語句
 6 
 7 }
 8 
 9 catch( ExceptionName e )
10 
11 {
12 
13 // 錯誤處理代碼
14 
15 }
16 
17 finally
18 
19 {
20 
21 // 要執行的語句
22 
23 }

 

示例

 1 using System;
 2 namespace DivisorIsZero
 3 {
 4     public class DivisorIsZero
 5     {
 6         private static void Main()
 7         {
 8             int div0 = 20;
 9             int div1 = 0;
10             int div2 = 2;
11             int DivValue;
12             
13             try
14             {
15                 DivValue = div0 / div1;
16                 System.Console.WriteLine("div0 / div1 = {0}", DivValue);
17             }
18             catch(DivideByZeroException e )
19             {
20                 System.Console.WriteLine("零不能作為除數!異常值為:\n{0}",e);
21             }
22             
23             // catch(DivideByZeroException e)子句只能捕獲特定的異常
24             // try內的程式代碼可能還會產生其它的異常,這些異常只能由catch(Exception e)來捕獲了
25             catch(Exception e )
26             {
27                 System.Console.WriteLine("並非\''零作為除數引發的異常\"!異常值為:\n{0}",e); 
28             }
29             finally  
30             {  
31                 System.Console.WriteLine("無論是否發生異常,我都會顯示");
32                 System.Console.ReadKey();
33             }
34         }
35     }
36 }

結果

  


C#中常見的異常類
  C# 異常是使用類來表示的
  C# 中的異常類主要是直接或間接地派生於 System.Exception 類System.ApplicationException 和System.SystemException 類是派生於 System.Exception 類的異常類
  System.ApplicationException 類支持由應用程式生成的異常。所以程式員定義的異常都應派生自該類
  System.SystemException 類是所有預定義的系統異常的基類

  由System.SystemException派生的異常類型:
  System.AccessViolationException 在試圖讀寫受保護記憶體時引發的異常
  System.ArgumentException 在向方法提供的其中一個參數無效時引發的異常
  System.Collections.Generic.KeyNotFoundException 指定用於訪問集合中元素的鍵與集合中的任何鍵都不匹配時所引發的異常
  System.IndexOutOfRangeException 訪問數組時,因元素索引超出數組邊界而引發的異常
  System.InvalidCastException 因無效類型轉換或顯示轉換引發的異常
  System.InvalidOperationException 當方法調用對於對象的當前狀態無效時引發的異常
  System.InvalidProgramException 當程式包含無效Microsoft中間語言(MSIL)或元數據時引發的異常,這通常表示生成程式的編譯器中有bug
  System.IO.IOException 發生I/O錯誤時引發的異常
  System.NotImplementedException 在無法實現請求的方法或操作時引發的異常
  System.NullReferenceException 嘗試對空對象引用進行操作時引發的異常
  System.OutOfMemoryException 沒有足夠的記憶體繼續執行程式時引發的異常
  System.StackOverflowException 掛起的方法調用過多而導致執行堆棧溢出時引發的異常

  由System.ArgumentException派生的異常類型:
  System.ArgumentNullException 當將空引用傳遞給不接受它作為有效參數的方法時引發的異常
  System.ArgumentOutOfRangeException 當參數值超出調用的方法所定義的允許取值範圍時引發的異常

  由System.ArithmeticException派生的異常類型:
  System.DivideByZeroException 試圖用零除整數值或十進位數值時引發的異常
  System.NotFiniteNumberException 當浮點值為正無窮大、負無窮大或非數字(NaN)時引發的異常
  System.OverflowException 在選中的上下文中所進行的算數運算、類型轉換或轉換操作導致溢出時引發的異常

  由System.IOException派生的異常類型:
  System.IO.DirectoryNotFoundException 當找不到文件或目錄的一部分時所引發的異常
  System.IO.DriveNotFoundException 當嘗試訪問的驅動器或共用不可用時引發的異常
  System.IO.EndOfStreamException 讀操作試圖超出流的末尾時引發的異常
  System.IO.FileLoadException 當找到托管程式卻不能載入它時引發的異常
  System.IO.FileNotFoundException 試圖訪問磁碟上不存在的文件失敗時引發的異常
  System.IO.PathTooLongException 當路徑名或文件名超過系統定義的最大長度時引發的異常

  其他常用異常類型:
  ArrayTypeMismatchException 試圖在數組中存儲錯誤類型的對象
  BadImageFormatException 圖形的格式錯誤
  DivideByZeroException 除零異常
  DllNotFoundException 找不到引用的dll
  FormatException 參數格式錯誤
  MethodAccessException 試圖訪問私有或者受保護的方法
  MissingMemberException 訪問一個無效版本的dll
  NotSupportedException 調用的方法在類中沒有實現
  PlatformNotSupportedException 平臺不支持某個特定屬性時拋出該錯誤

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 教程:一:元組的創建 元組(tuple)與列表類似,不同之處在於元組的元素不能修改 (1)tuple寫在圓括弧之間,元素用逗號隔開 (2)元組元素的類型可以不同 (3)一個元素,需要在元素後添加逗號tup = (20,) (4)元組也可以被索引和切片,方法一樣二:元組的索引 變數[頭標:尾標] 從前 ...
  • 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重覆的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 1.前序遍歷是中,左,右;中序遍歷是左,中,右 2.前序遍歷的... ...
  • 讀書筆記 kancy ...
  • 為了用事實說明挖掘機技術到底哪家強,PAT 組織了一場挖掘機技能大賽。現請你根據比賽結果統計出技術最強的那個學校。 輸入格式: 輸入在第 1 行給出不超過 1 的正整數 N,即參賽人數。隨後 N 行,每行給出一位參賽者的信息和成績,包括其所代表的學校的編號(從 1 開始連續編號)、及其比賽成績(百分 ...
  • 為什麼選擇 Java 想必有很多初學者會像我一樣,不知選擇什麼語言入門。在嘗試了 C、C++、C 、Python、PHP 後,我決定把 Java作 為第一門深入學習的編程語言。這個路著實有點長...... 不過放心,你可以大膽地選擇 Java。如果說 C++ 是編程界的曹操,那 Java 就是司馬懿 ...
  • 說明:小數點“.”後面的“*”表示輸出位數,具體的數據來自參數表。 printf格式字元串中,與寬度控制和精度控制有關的常量都可以換成變數,方法就是使用一個“*”代替那個常量,然後在後面提供變數給“*”。 同樣,小數點“.”前面也可以添加“*”,也要用戶輸入一個位寬值來代替,表示輸出的字元所占位寬。 ...
  • YouPBX YouPBX 是一個強大 FreeSwift (電話軟交換系統) 的管理GUI系統,基於Django開發,功能全面,體驗友好,可以基於此項目做一個完善的IPPBX系統、呼叫中心應用等 項目地址 https://github.com/JoneXiong/YouPBX 使用 ...
  • 調用加密 解密看效果 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...