C# 快速導覽 - try catch finally 陳述

C# 的例外處理 (exception handling) 利用 trycatchfinally 等三個關鍵字 (keyword) ,其中 try 要與 catchfinally 連用,舉例如下

class Demo {
    static void Main() {
        try {
            object o2 = null;
            int i2 = (int) o2; 
            System.Console.WriteLine(o2);
            System.Console.WriteLine(i2);
        }
        catch {
            System.Console.WriteLine("something wrong");
        }

        System.Console.WriteLine("After try ...."); 
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:try1.cs
    功能:示範 C# 程式 
    作者:張凱慶
    時間:西元 2013 年 6 月 */


編譯執行,結果如下



此例的 catch 沒有接任何參數 (parameter) ,表示任何例外 (exception) 都會處理
catch {


也可用多個 catch 限定處理例外的類別 (class) ,我們將上例增加一個 catch 如下
class Demo {
    static void Main() {
        try {
            object o2 = null;
            int i2 = (int) o2; 
            System.Console.WriteLine(o2);
            System.Console.WriteLine(i2);
        }
        catch (System.NullReferenceException e) {
            System.Console.WriteLine(e.ToString().Substring(0, 29));
        }
        catch {
            System.Console.WriteLine("something wrong");
        }

        System.Console.WriteLine("After try ...."); 
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:try1.cs
    功能:示範 C# 程式 
    作者:張凱慶
    時間:西元 2013 年 6 月 */


編譯執行,結果如下



這樣一來,最後沒有參數的 catch 就變成處理以上皆非的情況。


finally 則是無論例外是否發生都會執行的部份,例如
class Demo {
    static void Main() {
        try {
            object o2 = null;
            int i2 = (int) o2; 
            System.Console.WriteLine(o2);
            System.Console.WriteLine(i2);
        }
        catch (System.NullReferenceException e) {
            System.Console.WriteLine(e.ToString().Substring(0, 29));
        }
        catch {
            System.Console.WriteLine("something wrong");
        }
        finally {
            System.Console.WriteLine("finally"); 
        }

        System.Console.WriteLine("After try ...."); 
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:try3.cs
    功能:示範 C# 程式 
    作者:張凱慶
    時間:西元 2013 年 6 月 */


編譯執行,結果如下



中英文術語對照
例外處理exception handling
關鍵字keyword
參數parameter
例外exception
類別class


您可以繼續參考
例外處理


相關目錄
回 C# 快速導覽
回 C# 教材
回首頁


參考資料
Standard ECMA-334 C# Language Specification
msdn: 例外處理陳述式 (C# 參考)

沒有留言: