C#中的try catch 和finally

本文介绍C#中的异常处理机制,包括try、catch和finally关键字的使用方法。通过示例代码展示了如何捕获并处理异常,以及如何根据不同的异常类型进行响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在c#中处理错误经常会使用这几个关键字。本文介绍一下其用法

这三个关键字try是必定要用的,要不然就失去了意义。然后catch和finally可以不用但是要注意遵循原则

一个或多个catch的时间可以不用finally但是也可以用。

如果没有catch的时间必须要用finally。

其中每个关键字都对应的有自己的代码块

如这样的形式

try
{
   //code
}
catch
{
  //code
}
finally
{
   //code
}

现在开始说正事了

try代码块主要包括出错的代码如
 i = Convert.ToInt32(str);

不知道是否能转化成功。
catch是处理异常的代码

finally是处理异常之后要做的事情

        static void Main(string[] args)
        {
            int i=1 ;
            string str = "dfdfs";
            try
            {
                i = Convert.ToInt32(str);//有异常的地方
            }
            catch //(Exception e)
            {
                //Console.WriteLine(e.Message);
                i = 3;//处理异常
                //throw new Exception("转化失败");
            }
            /*
              这里可以添加上,根据异常的类型来匹配,有点像case。关于异常的类型有很多
//System

ArgumentNullException //参数异常
ArgumentOutOfRangeException //参数异常
DivideByZeroException //除数为0异常
IndexOutOfRangeException //索引超出范围的异常
NullReference-Exception//参数异常
OverflowException //溢出异常
StackOverflowException //堆溢出异常

//System.IO

DirectoryNotFoundException//找不到路径的异常
EndOfStreamException //结束流的异常
FileNotFoundException//找不到文件异常
PathToo-LongException //路径太长异常

//System.Data

DuplicateNameException
InvalidConstrainException
InvalidExpressionException
Missing-PrimaryKeyException
NoNullAllowed-Exception
ReadOnlyException

//System.Runtime.InteropServices

InvalidComObjectException
InvalidOleVariantTypeException
SEHException
              catch(ExceptionType e )
               {
             //异常处理
               }
             */
            finally
            {
                Console.WriteLine(i.ToString());
            
            }
}


 

### C# 中 `try-catch-finally` 的使用方法 在 C# 编程中,`try-catch-finally` 是一种用于异常处理的重要机制。它允许开发者捕获并处理程序运行过程中可能出现的错误,从而提高应用程序的健壮性可靠性。 #### 基本结构 以下是 `try-catch-finally` 的基本语法结构: ```csharp try { // 可能引发异常的代码块 } catch (ExceptionType exceptionVariable) { // 处理特定类型的异常 } finally { // 无论是否发生异常都会执行的代码块 } ``` - **`try`**: 定义可能引发异常的一段代码区域。 - **`catch`**: 捕获由 `try` 块中抛出的异常,并对其进行适当处理。可以根据不同的异常类型定义多个 `catch` 块。 - **`finally`**: 不论是否有异常被抛出,该部分代码始终会被执行,通常用来释放资源或清理环境。 --- #### 示例一:捕获所有异常 当无法预测具体会发生哪种异常时,可以通过捕获基类 `System.Exception` 来统一处理各种未知情况。 ```csharp try { int a = 10; int b = 0; int result = a / b; // 此处会抛出 DivideByZeroException } catch (Exception ex) // 捕获所有异常 { Console.WriteLine($"错误: {ex.Message}"); Console.WriteLine($"堆栈跟踪: {ex.StackTrace}"); } ``` 此示例展示了如何通过 `catch` 块获取异常对象的信息[^2]。 --- #### 示例二:捕获特定异常 如果能够预知某些常见问题,则可以针对这些具体的异常类型编写单独的 `catch` 子句来分别应对不同状况下的逻辑分支。 ```csharp try { string filePath = "不存在的文件.txt"; string content = File.ReadAllText(filePath); // 如果文件不存在则抛出 FileNotFoundException } catch (FileNotFoundException ex) { Console.WriteLine($"文件未找到: {ex.FileName}"); } catch (IOException ex) // 更加宽泛的 I/O 错误捕捉器 { Console.WriteLine($"I/O 错误: {ex.Message}"); } ``` 这里说明了利用多重 catch 结构实现精细化控制流程走向的能力[^2]。 --- #### 示例三:使用 finally 清理资源 即使发生了不可恢复的重大失败事件,在退出当前函数之前仍然有必要完成一些必要的收尾工作比如关闭打开的数据连接或者销毁临时创建的对象实例等等... ```csharp FileStream fileStream = null; try { fileStream = new FileStream("example.dat", FileMode.Create); byte[] info = System.Text.Encoding.Default.GetBytes("这是一个测试字符串"); fileStream.Write(info, 0 ,info.Length ); } catch(UnauthorizedAccessException uae ) { Console.Error.WriteLine(uae.ToString()); } finally { if(fileStream!=null){ ((IDisposable)fileStream).Dispose(); Console.WriteLine("已成功处置掉文件流!"); } } ``` 上面的例子强调了即便遇到访问受限之类的障碍也要保证最终能够妥善结束任何已经开始的动作. --- ### 总结 以上就是关于C#语言里面有关于尝试执行某项任务的同时做好预防措施以防万一期间出现了意料之外的情况该如何去做的讲解[^1].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值