C# 如何一次捕获多个异常?


不建议简单地抓住 System.Exception。相反,仅应捕获“已知”异常

现在,这有时会导致不必要的重复代码,例如:

try
{
    WebId = new Guid(queryString["web"]);
}
catch (FormatException)
{
    WebId = Guid.Empty;
}
catch (OverflowException)
{
    WebId = Guid.Empty;
}

我想知道:有没有一种方法可以捕获这两个异常并且只 WebId = Guid.Empty 调用一次? 

给定的示例非常简单,因为它只是一个Guid。

但是,请想象一下代码中您多次修改对象的情况,并且如果其中一种操作以预期的方式失败,则您想“重置” object。但是,如果有意外的例外,我仍然想将其捕获。

参考解决方案:

捕捉System.Exception并打开类型:

catch (Exception ex)            
{                
    if (ex is FormatException || ex is OverflowException)
    {
        WebId = Guid.Empty;
        return;
    }

    throw;
}

从.NET 4.0开始,代码可以重写为:

Guid.TryParse(queryString["web"], out WebId);

TryParse绝不会引发异常,如果格式错误,则将WebId设置为,则返回false Guid.Empty。

从C#7开始,您可以避免在单独的行上引入变量

Guid.TryParse(queryString["web"], out Guid webId);

相关阅读 >>

system.threading.threadabortexception: 正在中止线程

.net框架-异常设计原则详解

c# 如何一次捕获多个异常

更多相关阅读请进入《异常》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...