C# try catch finally

2018-01-16 02:02 更新

C# try catch finally

try 語句指定受錯誤處理或清除代碼影響的代碼塊。

try 塊必須后跟 catch 塊, finally 塊,或兩者。

當(dāng)try塊中發(fā)生錯誤時, catch 塊執(zhí)行。

執(zhí)行 finally 塊執(zhí)行后離開 try 塊執(zhí)行清理代碼,無論是否發(fā)生錯誤。

catch塊可以訪問包含有關(guān)的信息的 Exception 對象錯誤。

您使用catch塊來補償錯誤或重新拋出異常。

如果您只想記錄問題,或者想要重新創(chuàng)建一個新的更高級別的異常類型,則重新拋出異常。

一個 finally 塊會給你的程序添加確定性,CLR總是執(zhí)行它。

它對清理任務(wù)(如關(guān)閉網(wǎng)絡(luò)連接)很有用。

try語句如下所示:

try {
    ... // exception may get thrown within execution of this block
} catch (ExceptionA ex) {
    ... // handle exception of type ExceptionA
} catch (ExceptionB ex) {
    ... // handle exception of type ExceptionB
} finally {
    ... // cleanup code
}

例子

考慮下面的程序:

class Main {
    static int Calc (int x) { 
       return 10 / x; 
    }
    static void Main()  {
       int y = Calc (0);
       Console.WriteLine (y);
    }
}

為了防止運行時在x為0的情況下拋出DivideByZeroException,我們可以捕獲異常,如下所示:

class Main {
    static int Calc (int x) { return 10 / x; }
    static void Main() {
       try {
          int y = Calc (0);
          Console.WriteLine (y);
       } catch (DivideByZeroException ex) {
          Console.WriteLine ("x cannot be zero");
       }
       Console.WriteLine ("program completed");
    }
}

catch子句

catch 子句指定要捕獲的異常的類型。

這必須是 System.Exception System.Exception 的子類。

捕獲 System.Exception 捕獲所有可能的錯誤。

您可以使用多個catch子句處理多個異常類型:

class Main {
    static void Main (string[] args) {
       try {
           byte b = byte.Parse (args[0]);
           Console.WriteLine (b);
       } catch (IndexOutOfRangeException ex) {
           Console.WriteLine ("Please provide at least one argument");
       } catch (FormatException ex) {
           Console.WriteLine ("That"s not a number!");
       } catch (OverflowException ex) {
           Console.WriteLine ("You"ve given me more than a byte!");
       }
    }
}

如果您不需要訪問其屬性,則可以捕獲異常而不指定變量:

catch (StackOverflowException) // no variable
{
    ...
}

我們可以省略變量和類型,這意味著將捕獲所有異常:

catch { 
   ... 
}

finally塊

finally 塊總是執(zhí)行。

finally塊通常用于清理代碼。

static void methodA() {
    StreamReader reader = null;
    try {
       reader = File.OpenText ("file.txt");
       if (reader.EndOfStream) return;
           Console.WriteLine (reader.ReadToEnd());
    } finally {
       if (reader != null) reader.Dispose();
    }
}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號