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);
Unity3D游戏开发实战教程打砖块游戏
教程

Unity3D游戏开发实战教程打砖块游戏

大漠老师

您将获得:掌握某些知识点、学会某些技巧(或思路)。大漠老师热衷游戏开发,技术分享,先后任职于光宇游戏、联众游戏等知名网络游戏软件公司,具有丰富的实战经验。


Unity3D游戏RollABall项目实战视频教程
教程

Unity3D游戏RollABall项目实战视频教程

大漠老师

您将获得:掌握某些知识点、学会某些技巧(或思路)。大漠老师热衷游戏开发,技术分享,先后任职于光宇游戏、联众游戏等知名网络游戏软件公司,具有丰富的实战经验。



Unity3D游戏实战换装系统视频教程
教程

Unity3D游戏实战换装系统视频教程

大漠老师

您将获得:掌握某些知识点、学会某些技巧(或思路)。讲师:大漠老师;热衷游戏开发,技术分享,先后任职于光宇游戏、联众游戏等知名网络游戏软件公司,具有丰富的实战经验。


C#上位机串口编程、Modbus编程
教程

C#上位机串口编程、Modbus编程

黄老师编程课堂

您将获得:1、熟练掌握Winform框架串口编程;2、掌握Modbus协议报文格式;3、掌握 C# Modbus协议编程;4、Modbus RTU、ASCII、TCP。



打赏

取消

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

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

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

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


评论

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