C# Try..Catch异常处理

C# 异常处理

在执行C#代码时,可能会发生不同的错误:程序员的编码错误、错误输入导致的错误或其他不可预见的事情。

发生错误时,C#通常会停止并生成错误消息。技术术语是:C#将抛出异常(抛出错误)。


C# try和catch语句

try 语句允许您定义要在执行时测试错误的代码块。

catch 语句允许您定义要执行的代码块,如果try块中发生错误。

trycatch 关键字成对出现:

语法

try 
{
  //  要尝试的代码块
}
catch (Exception e)
{
  //  处理错误的代码块
}

分析下面的示例,在这里我们创建一个三个整数数组:

这将产生一个错误,因为myNumbers[10]不存在。

int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]); // error!

错误信息是这样的:

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("Something went wrong.");
}

输出将是:

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.");
}

输出将是:

Something went wrong.
The 'try catch' is finished.
运行实例 »

throw 语句

throw 语句允许您创建自定义错误。

throw 语句与异常类exception class一起使用。 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: 'Access denied - You must be at least 18 years old.'

如果age的值是20,将不会有异常发生:

实例

checkAge(20);

输出将是:

Access granted - You are old enough!
运行实例 »