C#中的异常过滤器&try catch语块儿

try catch 语块

使用 try,catch,finally语句捕捉和处理这些异常所代表的错误

tyr{
    int left = int.Parse(lhsOperand.Text);
    int righ = int.Parse(rhsOperand.Text);
    result.Text = answer.ToString();
}catch(FormatException fEx)
{
    // 处理异常
}

代码运行时, 会尝试执行try块内的所有语句 如果没有任何语句产生异常,这些语句将一个接一个运行,直到全部完场 ,但一旦出现异常,就跳出try块,进入一个catch处理程序中执行


使用多个catch

tyr{
    int left = int.Parse(lhsOperand.Text);
    int righ = int.Parse(rhsOperand.Text);
    result.Text = answer.ToString();
}catch(FormatException fEx)
{
    // 处理异常
}catch(FormatException fEx)
{
    // ...
}

异常过滤器

异常过滤器是C#6的新功能,它影响异常和catch处理程序的匹配方式,允许指定catch处理程序的额外使用条件,这些条件采用的型式是when关键字加布尔表达式,

catch(Exception ex)when(ex.GetType()!=typeof(System.OutOfMemoryException)){
// 处理之前未捕捉的除OutOfMemoryException之外的所有异常
}
// GetType方法返回作为实参提供的变量的类型

使用finally块

当catch处理程序运行完毕,会从整个try/catch块之后的语句继续,而不是从抛出异常的语句之后继续,不执行某个语句,

有时没问题,但许多时候都有大问题,解决方案是写一个finally块,放到其中的语句总是运行(无论是否抛出异常),finally块要么紧接在try块之后,要么紧接最后一个catch块之后,

只要程序进入与finally块关联的try块,finally块是种都会运行—即使发生异常,如果抛出异常,而且在本地捕捉阿斗该异常,那么首先运行异常处理程序,然后运行finally块,

如果没有在本地捕捉到异常,那么首先运行finally块,再搜索异常处理程序,无论如何,finally块总是运行.

TextReader reader = ...;
...
try
{
    string line = reader.ReadLine();
    while(line!=null)
    {
        ...
        line = reader.ReadLine();
    }
}
finally
{
    if(reader!=null)
    {
        reader.Dispose();
    }
}

即使读取文件时发生异常,finally块也保证reader.Dispose语句得到执行

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值