C#异常处理知识汇总

1. C#异常的概念

C#是一种面向对象的编程语言,异常处理是其中的重要概念之一。异常是在程序执行过程中发生的错误或异常情况,可能导致程序无法正常继续执行。C#提供了异常处理的机制,允许开发人员在程序中捕获和处理异常,以保证程序的稳定性和可靠性。

1.1 异常的分类

异常可以分为两类:受控异常和不受控异常。

受控异常(Checked Exception)是指在编译期间就可以被检查到的异常,需要通过try-catch语句来捕获和处理。例如,输入输出流的异常、数据库访问的异常等。

不受控异常(Unchecked Exception)是指在运行时才能发现的异常,不需要强制捕获处理。例如,空引用异常、数组越界异常等。当不受控异常发生时,程序的执行会被中断。

1.2 异常处理的目的

异常处理的主要目的是保证程序的稳定性和可靠性。当程序出现异常时,如果没有进行处理,程序可能会崩溃或者产生不正确的结果。通过捕获和处理异常,程序可以在发生异常时做出合适的应对,继续执行下去或者给出错误提示,保证程序的正常运行。

2. C#的异常处理机制

C#异常处理机制采用了try-catch-finally语句块来处理异常。try中的代码块是可能抛出异常的代码,catch用于捕获并处理异常,finally用于执行无论是否发生异常都需要执行的代码。

2.1 try-catch语句

try-catch语句用于捕获并处理异常。当try块中的代码抛出异常时,catch块可以处理该异常,并根据情况采取相应的措施。

try

{

// 可能抛出异常的代码

}

catch (Exception ex)

{

// 异常处理代码

}

在catch块中,可以根据需要对异常进行处理,可以打印异常信息、记录日志等。使用ex.Message可以获取异常的错误信息。

2.2 catch块的异常过滤

catch块可以指定捕获特定类型的异常,也可以通过多个catch块来捕获不同类型的异常。

try

{

// 可能抛出异常的代码

}

catch (FileNotFoundException ex)

{

// 处理文件未找到异常

}

catch (IOException ex)

{

// 处理输入输出异常

}

catch (Exception ex)

{

// 处理其他类型的异常

}

上述代码中,首先捕获了FileNotFoundException异常,然后捕获了IOException异常,最后通过Exception捕获其他类型的异常。

2.3 finally语句

finally语句块中的代码会在try-catch语句块执行完毕后无论是否发生异常都会被执行。可以在finally语句块中进行一些必要的清理工作,例如关闭打开的文件、释放资源等。

try

{

// 可能抛出异常的代码

}

catch (Exception ex)

{

// 异常处理代码

}

finally

{

// finally语句块中的代码

}

3. 常见的异常类

C#中有许多内置的异常类用于处理各种可能发生的异常情况。

3.1 ArgumentNullException

当一个方法或构造函数的参数值为null时抛出的异常。例如:

public void PrintString(string str)

{

if (str == null)

{

throw new ArgumentNullException(nameof(str), "字符串不能为空");

}

Console.WriteLine(str);

}

在上述代码中,如果传入的字符串为空,会抛出一个ArgumentNullException异常,并指定参数名称和异常消息。

3.2 ArgumentOutOfRangeException

当一个方法或属性的参数值超出有效范围时抛出的异常。

public void SetAge(int age)

{

if (age < 0 || age > 100)

{

throw new ArgumentOutOfRangeException(nameof(age), "年龄必须在0到100之间");

}

this.age = age;

}

在上述代码中,如果设置的年龄超出了有效范围,会抛出一个ArgumentOutOfRangeException异常,并指定参数名称和异常消息。

3.3 DivideByZeroException

当除法运算中除数为0时抛出的异常。

预览部分 。。。。。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签