最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

使用 try/catch 處理異常
try-catch 塊的用途是捕捉和處理工作代碼所生成的異常。 有些異??梢栽?catch 塊中處理,解決問(wèn)題后不會(huì)再次引發(fā)異常;但更多情況下,您唯一能做的是確保引發(fā)適當(dāng)?shù)漠惓!?br /> 示例
在此示例中,IndexOutOfRangeException 不是最適當(dāng)?shù)漠惓#簩?duì)本方法而言 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 語(yǔ)句,以便在 IndexOutOfRangeException 發(fā)生時(shí)對(duì)其進(jìn)行處理。 catch 塊處理 IndexOutOfRangeException,并引發(fā)更適當(dāng)?shù)?ArgumentOutOfRangeException 異常。 為給調(diào)用方提供盡可能多的信息,應(yīng)考慮將原始異常指定為新異常的 InnerException。 因?yàn)?InnerException 屬性是只讀,所以必須在新異常的構(gòu)造函數(shù)中為其賦值。


使用 finally 執(zhí)行清理代碼
finally 語(yǔ)句的目的是確保即使在引發(fā)異常的情況下也能立即進(jìn)行必要的對(duì)象(通常是保存外部資源的對(duì)象)清理。此類(lèi)清理功能的一個(gè)示例是在使用后立即對(duì) FileStream 調(diào)用 Close,而不是等待公共語(yǔ)言運(yùn)行時(shí)對(duì)該對(duì)象進(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 語(yǔ)句,需要將清理代碼與工作代碼分開(kāi),如下所示。

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

相關(guān)文章

  • C# 多線程讀取注冊(cè)表,加載至TreeView

    C# 多線程讀取注冊(cè)表,加載至TreeView

    C#下多線程讀取注冊(cè)表,加載至TreeView的實(shí)現(xiàn)代碼。
    2009-09-09
  • 深入C# winform清除由GDI繪制出來(lái)的所有線條或圖形的解決方法

    深入C# winform清除由GDI繪制出來(lái)的所有線條或圖形的解決方法

    本篇文章是對(duì)在C#中使用winform清除由GDI繪制出來(lái)的所有線條或圖形的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#中利用Lotus notes公共郵箱發(fā)送郵件的方法

    C#中利用Lotus notes公共郵箱發(fā)送郵件的方法

    這篇文章主要給大家介紹了關(guān)于C#中利用Lotus notes公共郵箱發(fā)送郵件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2018-02-02
  • C#冒泡法排序算法實(shí)例分析

    C#冒泡法排序算法實(shí)例分析

    這篇文章主要介紹了C#冒泡法排序算法,結(jié)合兩個(gè)常用實(shí)例分析了C#冒泡排序算法的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-07-07
  • c# dynamic的好處

    c# dynamic的好處

    這篇文章主要介紹了c# dynamic的好處,以示例代碼幫助大家更好的了解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-12-12
  • 在C#中如何獲取程序集

    在C#中如何獲取程序集

    某一天我正在寫(xiě)一些反射代碼,目的是遍歷所有的程序集來(lái)查找一個(gè)特定的接口,然后在Startup中調(diào)用其上的一個(gè)方法,這篇文章主要介紹了在C#中如何獲取程序集,需要的朋友可以參考下
    2024-03-03
  • Windows系統(tǒng)中C#讀寫(xiě)ini配置文件的程序代碼示例分享

    Windows系統(tǒng)中C#讀寫(xiě)ini配置文件的程序代碼示例分享

    這篇文章主要介紹了C#讀寫(xiě)ini配置文件的程序代碼示例分享,在Windows下可以利用Win32的API函數(shù)輕松實(shí)現(xiàn),需要的朋友可以參考下
    2016-04-04
  • c# 實(shí)現(xiàn)的支付寶支付

    c# 實(shí)現(xiàn)的支付寶支付

    這篇文章主要介紹了c# 實(shí)現(xiàn)的支付寶支付的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01
  • C#使用非托管代碼直接修改字符串的方法

    C#使用非托管代碼直接修改字符串的方法

    在string方法中,如ToUpper等字符串操作方法,都會(huì)產(chǎn)生一個(gè)新的字符串,這樣增大了運(yùn)行開(kāi)支。一個(gè)替代方案是通過(guò)非托管代碼直接操作字符串。如替代ToUpper方法:
    2013-07-07
  • C#中的CheckBox控件詳解與應(yīng)用示例

    C#中的CheckBox控件詳解與應(yīng)用示例

    在WPF(Windows Presentation Foundation)應(yīng)用中,C#中的CheckBox控件是一種常用的用戶界面元素,允許用戶從多個(gè)選項(xiàng)中選擇一個(gè)或多個(gè)選項(xiàng),本文將詳細(xì)介紹CheckBox控件的功能、使用方法以及在應(yīng)用程序中的具體應(yīng)用示例,需要的朋友可以參考下
    2024-04-04

最新評(píng)論

桂阳县| 辉南县| 黔东| 白沙| 青州市| 南华县| 扎鲁特旗| 江陵县| 长垣县| 永登县| 修文县| 泸溪县| 松滋市| 榆社县| 荔浦县| 怀柔区| 塔河县| 嘉祥县| 鸡泽县| 合江县| 台前县| 南宁市| 桃园县| 西昌市| 沅陵县| 隆安县| 开江县| 平阴县| 扶风县| 漯河市| 佛冈县| 义乌市| 连江县| 庐江县| 五大连池市| 拜泉县| 奇台县| 疏勒县| 安塞县| 封开县| 阿荣旗|