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,您将**不会**收到异常。