使用 TryCatch....Finally 捕捉例外狀況

撰寫程式時,有時會發生錯誤狀況,這時我們會想知道說是哪個環節出了問題,使用

TryCatch的例外捕捉方法時,可以有效的去知道說哪個部分出了問題。

例如:型別不符合、找不到資料、記憶體不足等。

在寫一般的陳述式時,我們將此一部分放在 Try 的區塊中,若是 Try 區塊中有錯誤發生,

則程式會移向 Catch 區塊中,並用 Exception 擷取錯誤。

例如下方的程式碼:

 static void Main(string[] args)
{ 
            Stopwatch sw = new Stopwatch();
            int RUN_COUNT = 200 * 10000;
            long sum = 0;
            bool flag10k = false;

            sw.Start();
            for (int i = 0; i < RUN_COUNT; i++)
            {
                try
                {
                    sum += i;
                    if (i == 10000) flag10k = true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error:{0}", ex.Message);
                }
            }
            sw.Stop();
            Console.WriteLine("Test2 Sum={0:N0} Time={1:N0}ms", sum, sw.ElapsedMilliseconds);
}

使用 Catch 的 Exception 可以用來捕捉錯誤,也可以指定要捕捉哪種錯誤,如同最一開始所說的,

型別不符、記憶體不足的例外錯誤捕捉等。

下方列出 Exception 常見的錯誤:

Exception 說明
DivideByZeroException 出現了"除以零"的錯誤情況
FileNotFoundException 找不到檔案的錯誤情況
FormatException 轉換數字、字串(例如: ToString、Parse..)發生錯誤、或使用複合格式、使用佔位符(例如:String.Format 和 Console.WriteLine...)等輸出字串時發生錯誤
IndexOutOfRangeException 陣列或集合的索引值不正確(不存在或小於0)
InvalidOperationException 呼叫物件的方法時,發生錯誤
OutOfMemoryException 記憶體不足
Exception 所有錯誤狀況發生時

最後在 TryCatch 區塊的最後方,一般還會有一個 Finally,此 Finally 區塊裡面

的陳述式是一定會執行的部分,不管程式有沒有發生錯誤。

例如:

Try

{

//一般陳述式

}

catch

{

//例外狀況

}

finally

{

//一定會執行的部分

}

 

文章參考:

http://adon988.logdown.com/posts/1200790-exception-handling-in-c-teaching-notes-using-visual-studio

https://dotblogs.com.tw/yc421206/archive/2012/01/03/64154.aspx

http://blog.darkthread.net/post-2009-12-20-try-catch-performance.aspx