📜  异常 - C# (1)

📅  最后修改于: 2023-12-03 15:09:48.430000             🧑  作者: Mango

异常 - C#

在编程中,异常是指在运行时出现错误的情况。C#提供了对异常的处理机制,让我们能够在程序出错时优雅地处理异常并进行适当的处理。本篇文章讲解C#的异常处理机制。

C# 异常的分类

C#中的异常分为两种:

  • 系统异常:由.NET Framework提供的异常类型,如ArgumentNullExceptionArgumentOutOfRangeExceptionInvalidOperationException等。
  • 自定义异常:由开发者自己定义的异常类型,用于表示特定的业务逻辑异常。
Exception 类

在C#中,异常都是从System.Exception类派生而来的。该类是.NET Framework中所有异常类型的根类,它们都有以下公共属性:

| 属性 | 描述 | | ----------- | ------------------------------------------------------------ | | Message | 异常描述信息。这是一个只读属性,它包含一条描述异常详细信息的字符串。 | | Source | 引发错误的应用程序或对象的名称。 | | StackTrace | 异常堆栈信息。 | | TargetSite | 异常发生的方法。如果没有调用堆栈帧,则返回空引用(null)。 |

除了继承System.Exception类,自定义的异常类可以定义自己的属性和方法,以便在出现异常时提供更多的信息。

使用 try-catch 语句处理异常

在C#中,异常处理通常使用try-catch语句。当我们的代码抛出异常时,try块中的异常会被捕获,然后执行与异常关联的catch块中的代码。

try-catch语句的基本语法如下:

try
{
    // 可能会抛出异常的代码
}
catch (Exception ex) // 捕获异常并提供一个名为“ex”的变量来代表捕获的异常对象
{
    // 处理异常的代码
}

catch块中,我们可以使用捕获的异常对象来确定异常的类型并进行适当的处理。在实际开发中,我们通常需要根据异常的类型来执行不同的操作。

以下是一个try-catch语句的示例:

try
{
    // 一些可能会抛出异常的代码
}
catch (ArgumentNullException ex)
{
    // 处理 ArgumentNullException 异常
}
catch (ArgumentOutOfRangeException ex)
{
    // 处理 ArgumentOutOfRangeException 异常
}
catch (InvalidOperationException ex)
{
    // 处理 InvalidOperationException 异常
}
catch (Exception ex)
{
     // 所有其他类型的异常都会在此处处理
     // 如果不需要对不同的异常进行不同的处理,可以只使用一个 catch 块
}
finally
{
    // 在 try 块和 catch 块之后最终执行的代码,无论是否发生异常。
}

在上面的示例中,catch块按异常类型进行了分类处理。对于未被分类的异常,我们可以使用catch (Exception ex)捕获到所有的异常类型。

抛出异常

在C#中,我们还可以通过throw语句手动抛出异常。我们可以使用throw语句来抛出.NET Framework中提供的已有异常类型,也可以自定义异常类型并抛出。

以下是抛出异常的基本语法:

throw new Exception("异常消息");

例如,我们可以抛出一个ArgumentNullException异常:

throw new ArgumentNullException("param1", "参数不能为空");

如果我们定义了自己的异常类型,也可以抛出:

throw new MyCustomException("自定义异常信息");
总结

本文简单介绍了C#中的异常处理机制,包括异常的分类、System.Exception类、使用try-catch语句处理异常以及手动抛出异常等操作。在实际开发中,合理地使用异常处理机制可以保证程序的稳定性和安全性。