C# 异常 - Try..Catch
C# 异常
执行 C# 代码时,可能会发生不同的错误:程序员编写的代码错误、由于错误输入而导致的错误或其他不可预见的事情。
当发生错误时,C# 通常会停止并生成错误消息。其技术术语是:C# 将抛出异常(抛出错误)。
C# try 和 catch
try
语句允许您定义要在执行时测试错误的代码块。
catch
语句允许您定义在 try
块中发生错误时要执行的代码块。
try
和 catch
关键字成对出现:
语法
try { // 尝试的代码块 } catch (Exception e) { // 处理错误的代码块 }
考虑以下实例,我们创建一个包含三个整数的数组:
这将产生错误,因为 myNumbers[10] 不存在。
int[] myNumbers = {1, 2, 3}; Console.WriteLine(myNumbers[10]); // 错误!
错误消息将是这样的(数组索引越界):
System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'
如果发生错误,我们可以使用 try...catch
来捕获错误,并执行一些代码来处理它。
在下面的例子中,我们使用了 catch
块中的变量 e
和内置的 Message
属性,输出了一条描述异常的消息:
实例
try { int[] myNumbers = {1, 2, 3}; Console.WriteLine(myNumbers[10]); } catch (Exception e) { Console.WriteLine(e.Message); }
输出将会是(数组索引越界。):
Index was outside the bounds of the array.
你也可以输出你自己的错误信息:
实例
try { int[] myNumbers = {1, 2, 3}; Console.WriteLine(myNumbers[10]); } catch (Exception e) { Console.WriteLine("出现错误。"); }
输出将会是:
出现错误。
Finally
finally
语句允许您在 try...catch
之后执行代码,无论结果如何:
实例
try { int[] myNumbers = {1, 2, 3}; Console.WriteLine(myNumbers[10]); } catch (Exception e) { Console.WriteLine("出现错误。"); } finally { Console.WriteLine("'try catch' 结束。"); }
输出将会是:
出现错误。 'try catch' 结束。
throw 关键词
throw
语句允许您创建自定义错误。
throw
语句与异常类一起使用。C# 中有很多可用的异常类:
ArithmeticException
FileNotFoundException
IndexOutOfRangeException
TimeOutException
实例
static void checkAge(int age) { if (age < 18) { throw new ArithmeticException("访问被拒绝 - 您必须年满 18 岁。"); } else { Console.WriteLine("访问被授予 - 您已经够年龄了!"); } } static void Main(string[] args) { checkAge(15); }
程序中显示的错误消息将是:
System.ArithmeticException: '访问被拒绝 - 您必须年满 18 岁。'
如果 age
是 20,则不会出现异常:
实例
checkAge(20);
输出将会是:
访问被授予 - 您已经够年龄了!