欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#異常處理中try和catch語句及finally語句的用法示例

 更新時(shí)間:2016年02月01日 15:33:11   投稿:goldensun  
這篇文章主要介紹了C#異常處理中try和catch語句及finally語句的用法示例,finally語句的使用涉及到了C#的垃圾回收特性,需要的朋友可以參考下

使用 try/catch 處理異常
try-catch 塊的用途是捕捉和處理工作代碼所生成的異常。 有些異??梢栽?catch 塊中處理,解決問題后不會再次引發(fā)異常;但更多情況下,您唯一能做的是確保引發(fā)適當(dāng)?shù)漠惓!?br /> 示例
在此示例中,IndexOutOfRangeException 不是最適當(dāng)?shù)漠惓#簩Ρ痉椒ǘ?ArgumentOutOfRangeException 更恰當(dāng)些,因?yàn)殄e(cuò)誤是由調(diào)用方傳入的 index 參數(shù)導(dǎo)致的。

class TestTryCatch
{
  static int GetInt(int[] array, int index)
  {
    try
    {
      return array[index];
    }
    catch (System.IndexOutOfRangeException e) // CS0168
    {
      System.Console.WriteLine(e.Message);
      // Set IndexOutOfRangeException to the new exception's InnerException.
      throw new System.ArgumentOutOfRangeException("index parameter is out of range.", e);
    }
  }
}


注釋
導(dǎo)致異常的代碼被括在 try 塊中。 在其后面緊接著添加一個(gè) catch 語句,以便在 IndexOutOfRangeException 發(fā)生時(shí)對其進(jìn)行處理。 catch 塊處理 IndexOutOfRangeException,并引發(fā)更適當(dāng)?shù)?ArgumentOutOfRangeException 異常。 為給調(diào)用方提供盡可能多的信息,應(yīng)考慮將原始異常指定為新異常的 InnerException。 因?yàn)?InnerException 屬性是只讀,所以必須在新異常的構(gòu)造函數(shù)中為其賦值。


使用 finally 執(zhí)行清理代碼
finally 語句的目的是確保即使在引發(fā)異常的情況下也能立即進(jìn)行必要的對象(通常是保存外部資源的對象)清理。此類清理功能的一個(gè)示例是在使用后立即對 FileStream 調(diào)用 Close,而不是等待公共語言運(yùn)行時(shí)對該對象進(jìn)行垃圾回收,如下所示:

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();
}

為了將上面的代碼轉(zhuǎn)換為 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();
    }
  }
}

因?yàn)樵?OpenWrite() 調(diào)用前,try 塊內(nèi)隨時(shí)都有可能發(fā)生異常,OpenWrite() 調(diào)用本身也有可能失敗,所以我們無法保證該文件在我們嘗試關(guān)閉它時(shí)處于打開狀態(tài)。 finally 塊添加了一項(xiàng)檢查,以確保在調(diào)用 Close 方法前,F(xiàn)ileStream 對象不為 null。如果沒有 null 檢查,finally 塊可能引發(fā)自身的 NullReferenceException,但是應(yīng)當(dāng)盡可能避免在 finally 塊中引發(fā)異常。
在 finally 塊中關(guān)閉數(shù)據(jù)庫連接是另一個(gè)不錯(cuò)的選擇。因?yàn)橛袝r(shí)候數(shù)據(jù)庫服務(wù)器允許的連接數(shù)是有限的,所以應(yīng)盡快關(guān)閉數(shù)據(jù)庫連接。在由于引發(fā)了異常而無法關(guān)閉連接的情況下,使用 finally 塊也是比等待垃圾回收更好的一種選擇。

相關(guān)文章

  • Unity接入百度AI實(shí)現(xiàn)通用物體和場景識別

    Unity接入百度AI實(shí)現(xiàn)通用物體和場景識別

    這篇文章主要介紹了在Unity中接入百度AI接口,從而實(shí)現(xiàn)通用物體和場景的識別,其中接口返回大類及細(xì)分類的名稱,并支持獲取識別結(jié)果對應(yīng)的百科信息。感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • C#中閉包概念講解

    C#中閉包概念講解

    這篇文章主要介紹了C#中閉包概念講解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 如何用C#驗(yàn)證IP是否為局域網(wǎng)地址

    如何用C#驗(yàn)證IP是否為局域網(wǎng)地址

    這篇文章主要介紹了如何用C#驗(yàn)證IP是否為局域網(wǎng)地址,文中講解非常細(xì)致,代碼幫助大家更好的參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C#基礎(chǔ)之異步調(diào)用實(shí)例教程

    C#基礎(chǔ)之異步調(diào)用實(shí)例教程

    這篇文章主要介紹了C#中的異步調(diào)用,對比同步調(diào)用分析了異步調(diào)用的原理及特點(diǎn),并以實(shí)例形式給出了實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-09-09
  • 在Linux上運(yùn)行C#的方法

    在Linux上運(yùn)行C#的方法

    這篇文章主要介紹了在Linux上運(yùn)行C#的方法,實(shí)例分析了Linux平臺下Mono軟件包的應(yīng)用技巧,以及在此基礎(chǔ)之上的C#運(yùn)行方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • C#中winform窗體實(shí)現(xiàn)注冊/登錄功能實(shí)例(DBHelper類)

    C#中winform窗體實(shí)現(xiàn)注冊/登錄功能實(shí)例(DBHelper類)

    在編寫項(xiàng)目時(shí),編寫了一部分關(guān)于登錄頁面的一些代碼,下面這篇文章主要給大家介紹了關(guān)于C#中winform窗體實(shí)現(xiàn)注冊/登錄功能(DBHelper類)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 5分鐘用C#實(shí)現(xiàn)串口助手

    5分鐘用C#實(shí)現(xiàn)串口助手

    本文主要介紹了C#實(shí)現(xiàn)串口助手,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C#中的尾遞歸與Continuation詳解

    C#中的尾遞歸與Continuation詳解

    這篇文章主要介紹了C#中的尾遞歸與Continuation詳解,本文講解了遞歸與尾遞歸、尾遞歸與Continuation、Continuation的改進(jìn)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • C#純代碼實(shí)現(xiàn)打字游戲

    C#純代碼實(shí)現(xiàn)打字游戲

    這篇文章主要介紹了這篇文章主要為大家詳細(xì)介紹了C#純代碼實(shí)現(xiàn)打字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C#異步調(diào)用的好處和方法分享

    C#異步調(diào)用的好處和方法分享

    我們要明確,為什么要進(jìn)行異步回調(diào)?眾所周知,普通方法運(yùn)行,是單線程的,如果中途有大型操作(如:讀取大文件,大批量操作數(shù)據(jù)庫,網(wǎng)絡(luò)傳輸?shù)龋紩?dǎo)致方法阻塞,表現(xiàn)在界面上就是,程序卡或者死掉,界面元素不動(dòng)了,不響應(yīng)了
    2012-04-04

最新評論