激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - 你應該知道的.NET錯誤與異常處理機制

你應該知道的.NET錯誤與異常處理機制

2020-06-17 15:29小世界的野孩子 ASP.NET教程

這篇文章主要給大家介紹了關于.NET錯誤與異常處理機制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用.NET具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

 

前言

 

錯誤的出現并不總是編寫程序的人的原因,有時應用程序會因為應用程序的最終用戶引發的動作或運行代碼的環境發生錯誤。無論如何,我們都應預測應用程序中出現的錯誤,并相應的進行編碼。

.Net改進了處理錯誤的方式。C#處理錯誤的機制可以為每種錯誤提供自定義處理方式,并把識別錯誤的代碼與處理錯誤的代碼分別開來。

 

異常類

 

在C#中當出現某個特殊的異常錯誤條件時,就會創建拋出一個異常對象,這個對象包含有助于跟蹤問題的信息。.Net提供了許多預定義的異常類,我們下面看看一些常見特別的異常類吧(異常類太多了,這里就介紹幾個常見的)。

對于.Net類,一般的異常類System.Exception派生自System.Object,通常不在代碼中拋出System.Exception泛型對象,因為他們無法確定錯誤情況的本質。

在該層次中有兩個重要的類,他們派生自System.Exception類:

  •  SystemException------該類用于通常由.NET允許庫拋出的異常,或者由幾乎所有的應用程序拋出的異常。例如,如果.NET運行庫檢測到棧已滿,他就會拋出StackOverflowException異常。另一方面,如果檢測到調用方法時參數不對,就可以在自己的代碼中選擇拋出ArgumentException異常或其子類。SystemException異常的子類包括表示致命錯誤和非致命錯誤的異常。
  •  ApplicationException----在.NET Framework最初的設計中,是打算把這個類作為自定義應用程序異常類的基類的。不過,CLR拋出的一些異常類也派生自這個類。應用程序拋出的異常則派生自SystemException。因此從ApplicationException派生自自定義異常類型沒有任何好處,取而代之的是,可以直接從Exception基類派生自定義異常類。

其他可能會用到的異常類包括:

  •  StackOverflowException-------如果分配給棧的內存區域已滿,就會拋出這個異常。如果一個方法連續地遞歸調用自己,就可能發生棧溢出。這一般是一個致命錯誤,因為它禁止應用程序執行除了中斷以外的其他任務。在這種情況下,甚至也不可能執行到finally塊。通常用戶自己不能處理像這樣的錯誤,而應退出應用程序。
  •  EndOfStreamException-------這個異常通常是因為讀到文件末尾而拋出的,流表示數據源之間的數據流。
  •  OverflowException-----如果要在checked上下文中把包含-40的int類型數據強制轉換為uint數據,就會拋出這個異常
  •  MemberAccessException----------該類用于處理訪問類的成員失敗時所引發的異常。失敗的原因可能的原因是沒有足夠的訪問權限,也可能是要訪問的成員根本不存在(類與類之間調用時常用)
  •  IndexOutOfException-------該類用于處理下標超出了數組長度所引發的異常

 

使用try...catch...finally捕獲異常

 

  • try 塊包含的代碼組成了程序的正常操作部分,但這部分程序可能會遇到某些嚴重的錯誤。
  • catch塊包含的代碼處理各種錯誤,這些錯誤是執行try塊中的代碼時遇到的問題。這個快可以用來記錄錯誤。
  • finally快包含的代碼清理資源或執行通常要在try塊或者catch塊末尾執行的其他操作。無論是否拋出異常,都會執行finally塊。finally塊中防止return語句,編譯器會標記一個錯誤。另外此塊可以如果沒有需要關閉或者處理的其他操作可以省略此塊。 

異常處理具有性能含義,在常見的情況下,不應該使用異常處理錯誤。應盡量編寫好避免錯誤出現的代碼。

在異常捕獲中,我們可以實現多個catch塊來針對不同的錯誤做出對應的錯誤處理。下面我們看一個例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class Program
 {
 static void Main(string[] args)
 {
  while (true)
  {
  try
  {
   string userInput;
   Console.WriteLine("請輸入0-5之間任意一個數字:");
   userInput = Console.ReadLine();
   if (string.IsNullOrWhiteSpace(userInput))
   {
   break;
   }
 
 
   if (int.TryParse(userInput, out int index))
   {
   if (index < 0 || index > 5)
   {
 
    throw new IndexOutOfRangeException($"你輸入的數字是{index}");
 
   }
   Console.WriteLine($"你輸入的數字是{index}");
   }
   else
   {
   throw new Exception("請輸入數字");
   }
  }
  catch (IndexOutOfRangeException ex)
  {
   Console.WriteLine($"你輸入的數字不在此范圍內.{ex.Message}");
  }
  catch (Exception ex)
  {
 
   Console.WriteLine(ex.Message);
  }
  finally
  {
   Console.WriteLine("謝謝合作");
  }
 
  
  }
 }
 }

在此事例中,定義了兩個catch塊。如果輸入的超過規定返回的數字,則會拋出超出范圍的錯誤也就進入對應的catch塊。而輸入的非數字也就進入了另外一個catch塊進行處理。

下面我們看一看關于System.Exception屬性。熟悉了解其中熟悉能更好的去觀察理解拋出的異常錯誤。

 

屬性

說明

Data

這個屬性可以給異常添加鍵/值語句,以提供關于異常的額外信息

HelpLink

連接到一個幫助文件上,以提供關于該異常的更多信息

InnerException

如果此異常是在catch塊中拋出的,它就會包含把代碼發送到catch塊的異常對象

Message

描述錯誤情況的文本

Source

導致異常的應用程序名或對象名

StackTrace

棧上方法調用的詳細信息,它有助于跟蹤拋出異常的方法

Hresult

分配給異常的一個數值

TargetSite

.NET反射對象,描述了拋出異常的方法

 

 

過濾異常、創建用戶定義的異常

 

自從C#6開始就支持異常過濾器。Catch塊僅在過濾器但會true時執行。捕獲不同的異常類型時,可以有行為不同的代碼塊。在某些情況下,catch塊基于異常的內容執行不同的操作。下面我們看下如何來使用異常過濾器吧:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class MyIndexOutOfException :SystemException
{
 public MyIndexOutOfException(string message) : base(message)
 {
 
 }
 
 public int ErrorCode { get; set; }
}
 
class Program
{
 static void Main(string[] args)
 {
  try
  {
   int steInput = 12;
 
   if (steInput > 10)
   {
    throw new MyIndexOutOfException("數據超出了范圍") { ErrorCode = 1 };
   }
 
  }
 
  catch (MyIndexOutOfException ex) when (ex.ErrorCode!=1)
 
  {
   Console.WriteLine("出現了自定義錯誤");
  }
 
  catch (MyIndexOutOfException ex) when (ex.ErrorCode == 1)
  {
   Console.WriteLine(ex.Message);
  }
 
  catch (Exception ex)
  {
 
   throw;
  }
 }
}

上面例子中,自定義了一個異常處理,同事增加ErrorCode,以此啦作為過濾條件,利用關鍵字When+條件來進行過濾。

總結

本篇文章介紹了異常處理錯誤的情況及機制,我們不僅可以輸出代碼好難過的一般錯誤代碼,也可以輸出我們自己定義的特殊錯誤情況。無論編程技術有多好,程序都必須能處理可能出現的任何錯誤。對不同的錯誤采取相應的應對措施,才是正確編碼的其中一步。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。

原文鏈接:https://www.cnblogs.com/hulizhong/p/11316352.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 亚洲电影免费观看国语版 | 草草久久久| 欧美日韩大片在线观看 | 337p粉嫩大胆噜噜噜亚瑟影院 | 日美黄色片 | 日韩精品中文字幕在线观看 | 涩涩天堂 | 久久精品一区二区三区不卡牛牛 | 黄a大片| 久久久国产精品网站 | av在线不卡免费 | 欧美日韩综合视频 | 国产精品久久久久免费视频 | 国产一区视频在线免费观看 | 一级毛片电影院 | 久久精品亚洲成在人线av网址 | 爽爽视频免费看 | 国产精品99久久久久久大便 | 亚洲精品久久久久久下一站 | 国产免费v片 | 一区二区免费网站 | 中国成人在线视频 | 精品国产91久久久久久久 | 久久精品亚洲国产奇米99 | 欧美成人高清视频 | 国产91九色 | 91精彩在线| 午夜视频在线观看91 | 男女生羞羞视频网站在线观看 | 色人阁在线视频 | 97色在线观看免费视频 | 久久sp| 午夜视频福利 | 日韩毛片一区二区三区 | 中文字幕国 | 成熟女人特级毛片www免费 | 日韩一级片一区二区三区 | 大西瓜永久免费av在线 | 久国产 | 国产日韩免费观看 | 香蕉成人在线视频 |