文章目录
- 1、C# 异常处理原理:
- 2、C# 异常处理实用案例(简化版示例):
- 3、throw关键字
C# 异常处理是一种用于捕获和处理程序运行时错误的机制,它允许程序在遇到不可预见或非正常条件时进行优雅地恢复或失败。C# 中的异常处理基于 try-catch-finally 结构,并且所有异常类都派生于 System.Exception 类。
1、C# 异常处理原理:
- try 块:包含可能会抛出异常的代码。如果在这部分代码中发生异常,控制权会立即转移到相应的 catch 块。
try
{// 可能会抛出异常的代码int result = Divide(10, 0); // 示例:除以零异常
}
- catch 块:用于捕获特定类型的异常。可以有多个 catch 块来捕获不同类型的异常,按照从最具体到最一般的顺序排列。
catch (DivideByZeroException ex) // 捕获除以零异常
{Console.WriteLine("Error: Division by zero occurred.");
}catch (ArithmeticException ex) // 捕获其他算术异常
{Console.WriteLine("Error: An arithmetic error happened.");
}catch (Exception ex) // 捕获所有未被前面 catch 块捕获的异常
{Console.WriteLine("A general exception was caught: " + ex.Message);
}
- finally 块:无论是否发生异常,都会执行这部分代码。通常用于资源清理(如关闭文件、数据库连接等)。
finally
{Console.WriteLine("This block is always executed after the try-catch blocks.");
}
2、C# 异常处理实用案例(简化版示例):
-
文件操作:
- 打开文件时捕获 FileNotFoundException。
try {using (StreamReader reader = new StreamReader("non_existent_file.txt")){string content = reader.ReadToEnd();} } catch (FileNotFoundException ex) {Console.WriteLine($"File not found: {ex.FileName}"); }
-
数据库查询:
- 处理 SQL 查询引发的 SqlException。
try {using (SqlConnection connection = new SqlConnection(connectionString)){SqlCommand command = new SqlCommand(query, connection);connection.Open();command.ExecuteNonQuery();} } catch (SqlException ex) {Console.WriteLine("SQL Error: " + ex.Message); }
-
网络请求:
- 使用 HttpClient 进行网络调用时捕获 HttpRequestException。
try {using (HttpClient client = new HttpClient()){HttpResponseMessage response = await client.GetAsync("http://example.com/notfound");response.EnsureSuccessStatusCode();} } catch (HttpRequestException ex) {Console.WriteLine("Network request failed: " + ex.Message); }
-
非法参数检查:
- 检查方法传入的参数是否有效,若无效则抛出自定义异常。
public void ProcessData(int input) {if (input < 0){throw new ArgumentException("Input must be non-negative.");}try{// 正常处理逻辑}catch (Exception ex){// 其他内部异常处理} }
-
资源清理:
- 使用 finally 来确保流或连接始终关闭。
Stream stream = null; try {stream = File.OpenRead("important_file.bin");// 对文件流的操作... } catch (IOException ex) {Console.WriteLine("IO Error: " + ex.Message); } finally {stream?.Dispose(); // 或者使用 'using' 语句代替 finally 块 }
3、throw关键字
throw 关键字用于显式抛出一个异常对象。当你在代码中遇到错误条件或不满足预期的情况时,可以使用 throw 来创建并抛出一个异常。
csharp
throw new ArgumentException(“Invalid argument provided.”);
当你执行 throw 语句时,它会立即停止当前方法的执行,并开始寻找合适的异常处理结构(即 catch 块),从当前方法的调用者开始向上遍历调用栈。
总结一下 throw 和 catch 的区别与用途:
throw:用于启动异常传播过程,强制程序暂停正常执行流程并转而处理错误情况。
catch:用于接收和管理由 throw 引发的异常,提供了一种机制来应对程序运行时出现的问题,确保程序不会因未处理的异常而意外终止,同时能够针对性地执行错误恢复逻辑。
python学习汇总连接:
50个开发必备的Python经典脚本(1-10)
50个开发必备的Python经典脚本(11-20)
50个开发必备的Python经典脚本(21-30)
50个开发必备的Python经典脚本(31-40)
50个开发必备的Python经典脚本(41-50)
————————————————
最后我们放松一下眼睛