错误和异常处理(Visual C# 速成版)

更新:2007 年 11 月

如果 C# 程序运行期间发生错误,异常就会发生。异常会中止当前的程序流,如果不采取措施,程序将停止运行。异常可能会由程序中的 bug(例如数字被零除)或某些意外输入(如用户选择了不存在的文件)而造成。作为程序员,您需要使程序能够处理这些问题,避免程序崩溃至暂停。

C# 提供了几个关键字(try、catch 和 finally),程序可以用这些关键字检测异常、处理异常并继续运行。这些关键字是让应用程序更可靠的非常有用的工具。

Try 和 Catch

try 和 catch 关键字一起使用。使用 try 将您认为可能会生成异常的代码块括起来,使用 catch 将发生异常时要执行的代码括起来。在此示例中,计算会创建被零除的异常,然后捕获该异常。如果没有 try 和 catch 块,此程序将失败。

class ProgramTryCatch
{
    static void Main()
    {
        int x=0, y=0;

        try
        {
            x = 10 / y;
        }

        catch (System.DivideByZeroException)
        {
            System.Console.WriteLine("There was an attempt to divide by zero.");
        }
    }
}

分清 catch 代码检测的异常的具体类型是很好的编程习惯。每个 try 可以有多条 catch 语句,分别处理不同的异常。

finally 块

finally 块中包含的代码始终会执行,无论是否发生异常。使用 finally 块来确保资源已返回:例如,确保文件已关闭。

try
{
    // Code to try here.
}
catch (SomeSpecificException ex)
{
    // Code to handle exception here.
}
finally
{
    // Code to execute after try (and possibly catch) here.
}

使用异常处理

异常并不总是程序中发生灾难性问题的标志。通常,异常是留下不再相关的代码节的简便方法,或是方法不成功的信号。许多 .NET Framework 类方法创建异常以警告特定的情况。

您也可以使用 throw 关键字来引发自己的异常。例如:

class ProgramThrow
{
    static void DoWork(int x)
    {
        if (x > 5)
        {
            throw new System.ArgumentOutOfRangeException("X is too large");
        }
    }

    static void Main()
    {
        try
        {
            DoWork(10);
        }
        catch (System.ArgumentOutOfRangeException ex)
        {
            System.Console.WriteLine(ex.Message);
        }
    }
}

当认为有发生一些意外情况的可能时,请在程序中使用异常。例如,当处理来自用户的输入、读文件或访问 Internet 信息时。

请参见

任务

如何:捕捉异常 (Visual C#)

概念

C# 语言入门

参考

异常处理语句(C# 参考)

throw(C# 参考)

try-catch(C# 参考)

try-finally(C# 参考)

try-catch-finally(C# 参考)