📅  最后修改于: 2023-12-03 15:09:48.430000             🧑  作者: Mango
在编程中,异常是指在运行时出现错误的情况。C#提供了对异常的处理机制,让我们能够在程序出错时优雅地处理异常并进行适当的处理。本篇文章讲解C#的异常处理机制。
C#中的异常分为两种:
ArgumentNullException
、ArgumentOutOfRangeException
、InvalidOperationException
等。在C#中,异常都是从System.Exception
类派生而来的。该类是.NET Framework中所有异常类型的根类,它们都有以下公共属性:
| 属性 | 描述 |
| ----------- | ------------------------------------------------------------ |
| Message
| 异常描述信息。这是一个只读属性,它包含一条描述异常详细信息的字符串。 |
| Source
| 引发错误的应用程序或对象的名称。 |
| StackTrace
| 异常堆栈信息。 |
| TargetSite
| 异常发生的方法。如果没有调用堆栈帧,则返回空引用(null
)。 |
除了继承System.Exception
类,自定义的异常类可以定义自己的属性和方法,以便在出现异常时提供更多的信息。
在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
语句处理异常以及手动抛出异常等操作。在实际开发中,合理地使用异常处理机制可以保证程序的稳定性和安全性。