C# 異常 - Try..Catch
C# 異常
執行 C# 程式碼時,可能會發生各種錯誤:程式設計師的編碼錯誤、輸入錯誤導致的錯誤,或其他不可預見的事件。
當發生錯誤時,C# 通常會停止並生成一條錯誤訊息。這個技術術語是:C# 將**丟擲(throw)**一個**異常**(丟擲一個錯誤)。
C# try 和 catch
try
語句允許您定義一個程式碼塊,在執行時對其進行錯誤測試。
catch
語句允許您定義一個程式碼塊,在 `try` 塊中發生錯誤時執行。
try
和 catch
關鍵字成對出現
語法
try
{
// Block of code to try
}
catch (Exception e)
{
// Block of code to handle errors
}
考慮以下示例,我們建立了一個包含三個整數的陣列
這將生成一個錯誤,因為 myNumbers[10] 不存在。
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]); // error!
錯誤訊息將類似如下內容
System.IndexOutOfRangeException: '索引超出了陣列的界限。'
如果發生錯誤,我們可以使用 try...catch
來捕獲錯誤並執行一些程式碼來處理它。
在以下示例中,我們在 catch 塊中使用變數(e
)以及內建的 Message
屬性,該屬性會輸出一條描述異常的訊息
示例
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
輸出將是:
索引超出了陣列的界限。
您也可以輸出自己的錯誤訊息
示例
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine("Something went wrong.");
}
輸出將是:
發生了錯誤。
Finally
finally
語句允許您在 try...catch
之後執行程式碼,而不管結果如何。
示例
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine("Something went wrong.");
}
finally
{
Console.WriteLine("The 'try catch' is finished.");
}
輸出將是:
發生了錯誤。
The 'try catch' is finished.
throw 關鍵字
throw
語句允許您建立自定義錯誤。
throw
語句與一個**異常類**一起使用。C# 中有許多可用的異常類:ArithmeticException
、FileNotFoundException
、 IndexOutOfRangeException
、TimeOutException
等等。
示例
static void checkAge(int age)
{
if (age < 18)
{
throw new ArithmeticException("Access denied - You must be at least 18 years old.");
}
else
{
Console.WriteLine("Access granted - You are old enough!");
}
}
static void Main(string[] args)
{
checkAge(15);
}
程式中顯示的錯誤訊息將是
System.ArithmeticException: '訪問被拒絕 - 您必須至少 18 歲。'
如果 age
是 20,您將**不會**收到異常。