C# 异常 - Try..Catch
C# 异常
在执行 C# 代码时,可能会发生各种错误:程序员编写的编码错误、由于错误输入导致的错误或其他不可预见的事情。
当发生错误时,C# 通常会停止并生成错误消息。这个专业术语是:C# 会抛出一个 **异常**(抛出一个错误)。
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
语句允许您执行代码,在 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.");
}
输出将是:
出现错误。
“try catch”已完成。
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,则 **不会** 出现异常。