【基礎】C#異常處理的總結

一、異常處理的理解?

異常處理是指程序在運行過程中,發生錯誤會導致程序退出,這種錯誤,就叫做異常。

因此處理這種錯誤,就稱為異常處理。

二、異常處理如何操作?

C# 異常處理時建立在四個關鍵詞之上的:try、catch、finally 和 throw。

1、try:一個 try 塊標識了一個將被激活的特定的異常的代碼塊。后跟一個或多個 catch 塊。

2、catch:程序通過異常處理程序捕獲異常。catch 關鍵字表示異常的捕獲。

3、finally:finally 塊用于執行給定的語句,不管異常是否被拋出都會執行。

例如如果你打開一個文件,不管是否出現異常文件都要被關閉。

4、throw:當問題出現時,程序拋出一個異常。使用 throw 關鍵字來完成。

語法示例:

try

{

// 引起異常的語句

}

catch( ExceptionName e1 )

{

// 錯誤處理代碼

}

catch( ExceptionName e2 )

{

// 錯誤處理代碼

}

catch( ExceptionName eN )

{

// 錯誤處理代碼

}

finally

{

// 要執行的語句

}

三、C#中的異常類

C# 異常是使用類來表示的。C# 中的異常類主要是直接或間接地派生于System.Exception

(1).由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掛起的方法調用過多而導致執行堆棧溢出時引發的異常。

(2).由System.ArgumentException派生的異常類型:

System.ArgumentNullException當將空引用傳遞給不接受它作為有效參數的方法時引發的異常。

System.ArgumentOutOfRangeException當參數值超出調用的方法所定義的允許取值范圍時引發的異常。

(3).由System.ArithmeticException派生的異常類型:

System.DivideByZeroException試圖用零除整數值或十進制數值時引發的異常。

System.NotFiniteNumberException當浮點值為正無窮大、負無窮大或非數字(NaN)時引發的異常。

System.OverflowException在選中的上下文中所進行的算數運算、類型轉換或轉換操作導致溢出時引發的異常。

(4).由System.IOException派生的異常類型:

System.IO.DirectoryNotFoundException當找不到文件或目錄的一部分時所引發的異常。

System.IO.DriveNotFoundException當嘗試訪問的驅動器或共享不可用時引發的異常。

System.IO.EndOfStreamException讀操作試圖超出流的末尾時引發的異常。

System.IO.FileLoadException當找到托管程序卻不能加載它時引發的異常。

System.IO.FileNotFoundException試圖訪問磁盤上不存在的文件失敗時引發的異常。

System.IO.PathTooLongException當路徑名或文件名超過系統定義的最大長度時引發的異常。

(5).其他常用異常類型:

ArrayTypeMismatchException試圖在數組中存儲錯誤類型的對象。

BadImageFormatException圖形的格式錯誤。

DivideByZeroException除零異常。

DllNotFoundException找不到引用的dll。

FormatException參數格式錯誤。

MethodAccessException試圖訪問私有或者受保護的方法。

MissingMemberException訪問一個無效版本的dll。

NotSupportedException調用的方法在類中沒有實現。

PlatformNotSupportedException平臺不支持某個特定屬性時拋出該錯誤。

四、示例

class MyExceptionTest

{

static double SafeDivision(double x, double y)

{

if (y == 0)

throw new System.DivideByZeroException();

return x / y;

}

static void Main()

{

double a = 98, b = 0;

double result = 0;

try

{

result = SafeDivision(a, b);

Console.WriteLine("{0} divided by {1} = {2}", a, b, result);

}

catch (DivideByZeroException e)

{

Console.WriteLine("Attempted divide by zero.");

}

}

}

公眾號原文

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272816.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272816.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272816.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java Web 路徑問題

可能在做文件上傳或者 圖片加載,資源加載 時候用到文件相對服務器地址 System.out.println(request.getRemoteUser()); //客戶端用戶System.out.println(request.getRemoteAddr()); //客戶端IPSystem.out.println(request.getRemoteHost()); //客戶端主機名Syst…

mysql 多字節編碼漏洞_phpmyadmin 4.8.1 遠程文件包含漏洞(CVE-2018-12613)

漏洞詳情范圍 phpMyAdmin 4.8.0和4.8.1原理 首先在index.php 50-63行代碼$target_blacklist array (import.php, export.php);// If we have a valid target, lets load that script insteadif (! empty($_REQUEST[target])&& is_string($_REQUEST[target])&&…

.Net開發的兩個小技巧

一、符號的妙用1、可以作為保留關鍵字的標識符C#規范當中,不允許使用保留關鍵字(class、bool等)當作普通的標識符來命名,這時候符號作用就體現出來了,可以通過符號前綴把這些保留關鍵字可以當作普通的字符使用。比如&a…

Codeforces Round #FF (Div. 1) A. DZY Loves Sequences

原題鏈接:http://codeforces.com/problemset/problem/446/A 題意:給一個長度為n的序列,最多可以修改一個位置的數,求最長連續上升子序列。 題解:當a[i1] > a[i-1]2的時候,可以通過改變a[i]的值來使前后兩…

25句張小嫻經典愛情語錄,句句穿心!

1、女人在床上流的眼淚,比在任何一個地方多。男人在床上說的謊話,也比在任何一個地方多。2、承諾本來就是男人與女人的一場角力,有時皆大歡喜,大部份的情況卻兩敗俱傷。3、愛情正是一個將一對陌生人變成情侶,又將一對情…

mysql 數據庫事務處理_Mysql事務處理問題 - mysql數據庫欄目 - 自學php

今天和同學討論起數據庫事務處理的問題,感覺討論中明白了一些,有些知識看過了,但是沒有實際使用還是不理解。事務處理就是將一系列操作當做一個原子操作,要么全部執行成功,如果執行失敗則保留執行期的狀態。通過提交和…

[LeetCode] Palindrome Linked List

Given a singly linked list, determine if it is a palindrome. 一開始想用棧,但是試來試去發現寫不出來遂放棄,后來想想再不濟可以轉換成數組然后分別兩頭掃,但是這樣就用了O(n) 的空間,再進一步,可不可以在鏈表里模…

【原創】Ajax的用法總結

一、什么是AjaxAjax英文全稱為“ Asynchr JavsScript and XML”(異步的JavaScript和XML),是一種創建交互式網頁的開發技術。二、Ajax技術的核心Ajax是一系列相關技術的融合,其核心包括XMLHttpRequest、JavsScript和DOM技術&#x…

gprs java_WISMO模塊GPRS上網設置的過程

WISMO模塊GPRS上網設置的過程一) AT指令設置部分(1) ATCGCLASS“B”置為“網絡WISMO模塊GPRS上網設置的過程一) AT指令設置部分(1) ATCGCLASS“B”置為“B”模式。(2) ATCGDCONT1,“IP”,“CMNET”設置APN。(3) ATCSQ 檢查信號 若返回10—31&#xff0c…

loadrunner性能測試步驟

性能測試過程分為4個階段:設計、構建、執行、分析/診斷/調節具體的工作流程如下圖 設計  >  構建  >  執行   >  分析/診斷/調節 收集要求    設置測試環境 基準測試    診斷瓶頸 設計測試策略  記錄測試腳本 性能測試     調…

Asp.Net生命周期的詳解

一.Asp.Net頁面生命周期的概念當我們在瀏覽器地址欄中輸入網址,回車查看頁面時,這時會向服務器端IIS)發送一個request請求,服務器就會判斷發送過來的請求頁面,當完全識別 TTP頁面處理程序類后,A…

java chain_java 8中 predicate chain的使用

java 8中 predicate chain的使用簡介Predicate是一個FunctionalInterface,代表的方法需要輸入一個參數,返回boolean類型。通常用在stream的filter中,表示是否滿足過濾條件。boolean test(T t);基本使用我們先看下在stream的filter中怎么使用P…

前段技術學習計劃

資料: 著作權歸作者所有。 商業轉載請聯系作者獲得授權,非商業轉載請注明出處。 作者:陳禹魯 鏈接:http://www.zhihu.com/question/19809484/answer/35544452 來源:知乎 第一本,入門 《Head first HTML&…

指針的概念

在C語言中,內存單元的地址稱為指針,專門用來存放地址的變量,有時對地址,指針和指針變量不區分,統稱指針。(地址指針) 一般情況下,最前面的存儲類型通常會省略 指針在說明的同時&…

整理一些提高C#編程性能的技巧

1、使用StringBuilder代替使用string 連接符 ""說明:String類對象是不可變的(只讀),一旦創建該對象,就不能修改該對象的值。對象String對象的重新賦值,本質上是重新創建了一個String對象并將新的…

python爬知識星球付費數據_用python爬取知識星球

去年我們做過一個叫「學長問答」的社群活動,里面沉淀了大量有價值的互動信息,后來因為各種原因終止了。今天和涂騰聊起來,覺得這些信息就這么沉寂了太浪費。所以就試著用python爬取了知識星球的內容。這個過程又學習了一些新的知識&#xff0…

HTML學習(1)

1、縮寫和首字母縮寫<abbr><acronym> <abbr title"etcetera">etc.</abbr> <acronym title"World Wide Web">WWW</acronym> 2、塊引用&#xff08;短&#xff09; <p>A: <q>B</q>C</p> 顯示結…

常用的7個SQl優化技巧

作為程序員經常和數據庫打交道的時候還是非常頻繁的&#xff0c;掌握住一些Sql的優化技巧還是非常有必要的。下面列出一些常用的SQl優化技巧&#xff0c;感興趣的朋友可以了解一下。1、注意通配符中Like的使用以下寫法會造成全表的掃描&#xff0c;例如&#xff1a;select id,n…

toolbar java_Java ToolBar.layout方法代碼示例

import org.eclipse.swt.widgets.ToolBar; //導入方法依賴的package包/類protected ToolBar createToolbar() {final ToolBar t new ToolBar(composite, SWT.FLAT | SWT.LEFT | SWT.HORIZONTAL | SWT.WRAP);final GridData d new GridData(SWT.FILL, SWT.TOP, false, false);…

Visual Studio常用的快捷鍵整理

微軟的開發工具Visual Studio作為DoNet開發者來說是必備神器&#xff0c;該開發工具內置了很多的開發快捷鍵&#xff0c;熟悉了這些開發快捷鍵&#xff0c;對于程序員來說事半功倍&#xff0c;所以在這里整理一下&#xff0c;版本是vs2012以上&#xff0c;目前小編列出了自己覺…