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