C# 异常处理


C# 异常处理

简介

在 C# 开发中,在程序执行的过程中难免会遇到一些错误情况,如输入错误、文件不存在等等,这些情况产生的错误就是异常。C# 中提供了异常处理机制,使程序能够在出现异常情况时,不会终止程序的执行,而是通过异常处理程序对异常进行处理,并进行相应的操作。

异常处理的基本框架

异常处理的基本框架是 try-catch-finally 语句块,其中 try 块是需要进行异常检测的代码段,catch 块用于捕获并处理异常,finally 块用于释放资源。

try
{
   //需要进行异常检测的代码段
}
catch(Exception ex)
{
   //捕获并处理异常
}
finally
{
   //释放资源
}

处理异常

在 catch 块中可以使用以下语句处理异常:

throw

将当前异常对象重新抛出,并终止当前 catch 块后面的代码执行。

catch (Exception ex)
{
    throw ex;
}

throw new Exception(“error message”)

手动抛出一个给定的异常并终止当前 catch 块后面的代码执行。

catch (Exception ex)
{
    throw new Exception("error message");
}

处理异常并重新抛出

在 catch 块中可以处理异常并重新抛出异常,例如:

try
{
    //需要进行异常检测的代码段
}
catch (Exception ex)
{
    //捕获并处理异常
    if (ex is InvalidOperationException)
    {
        //处理 InvalidOperationException 异常情况
    }
    else if (ex is ArgumentException)
    {
        //处理 ArgumentException 异常情况
    }
    //重新抛出异常
    throw;
}
finally
{
    //释放资源
}

多 catch 块

可以针对不同的异常类型设置多个 catch 块,例如:

try
{
    //需要进行异常检测的代码段
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("DivideByZeroException Exception");
}
catch (Exception ex)
{
    Console.WriteLine("Exception");
}
finally
{
    //释放资源
}

在上述代码中,程序先进行对除0操作进行异常检测,如果出现 DivideByZeroException 异常,则执行第一个 catch 块中的代码;如果出现其它类型的异常,则执行第二个 catch 块中的代码。

自定义异常

在 C# 中,可以自定义异常类,以便在程序中使用。自定义类必须继承于 System.Exception,如下所示:

public class MyException : Exception
{
    public MyException(string message) : base(message)
    {
    }
}

上述代码中,MyException 是自定义的异常类,继承于 Exception 类。我们在使用时,可以像使用系统自带的异常一样使用。

总结

C# 中的异常处理机制,能够保证程序在出现异常时不会中断程序的执行。程序员只需要在代码中进行异常处理即可,使程序具有更好的健壮性。多个 catch 块可以用于处理不同类型的异常,自定义异常类能够更加精确地抛出异常并进行处理。