.net关于异常捕获的语法糖

布谷歌 2017-07-25 10:27:35
哈哈,.net貌似没有关于异常捕获的语法糖。

比如下面的语句,catch到的两个自定义异常做的处理是相同的
try
{
......
}
catch (ResponseErrorException customError)
{
logHelper.Write(string.Format("商户查证可疑订单执行:{0},\r\n错误原因:{1}", JsonConvert.SerializeObject(item), customError.Message));
}
catch (ThirdPlatformException customError)
{
logHelper.Write(string.Format("商户查证可疑订单执行:{0},\r\n错误原因:{1}", JsonConvert.SerializeObject(item), customError.Message));
}
catch (Exception ex)
{
logHelper.Write(string.Format("商户查证可疑订单执行:{0},\r\n错误原因:{1}", JsonConvert.SerializeObject(item), ex.ToString()));
}

那么,如果可以写成类似如下方式,那就太好了:
try
{
......
}
catch (ResponseErrorException customError)
catch (ThirdPlatformException customError)
{
logHelper.Write(string.Format("商户查证可疑订单执行:{0},\r\n错误原因:{1}", JsonConvert.SerializeObject(item), customError.Message));
}
catch (Exception ex)
{
logHelper.Write(string.Format("商户查证可疑订单执行:{0},\r\n错误原因:{1}", JsonConvert.SerializeObject(item), ex.ToString()));
}


就像switch里的可以多个case做相同处理那样,多方便啊。
大家认为呢?
...全文
490 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
-一个大坑 2017-07-26
  • 打赏
  • 举报
回复
引用 6 楼 gzyes 的回复:
@happy4944 当心坑洞
现在有问题了,老板要改成看的懂得提示
正怒月神 2017-07-26
  • 打赏
  • 举报
回复
2个自定异常,说明本质应该补货不同的异常。 只是偶然性的,2个异常显示了相同的信息。 但是不代表他们应该合并起来。
-一个大坑 2017-07-25
  • 打赏
  • 举报
回复
我比较懒,都是一个方法只写一个catch
  • 打赏
  • 举报
回复
想法不错啊,不过多写一个catch也不费什么事吧。
  • 打赏
  • 举报
回复
catch (ResponseErrorException customError)
catch (ThirdPlatformException customError)
{
    logHelper.Write(string.Format("商户查证可疑订单执行:{0},\r\n错误原因:{1}", JsonConvert.SerializeObject(item), customError.Message));
}
这种东西根本就是自相矛盾的,customError 跟 customError 完全是两个不同种类的东西(只是命名相同),怎么纠结到一起? 原本分开写是很正常的,合并在一起反而不正常了。就好像我写代码
if(....)
{
    var a= "张三";
    .......
}
else
{
    var a= DateTime.Now;
    .......
}
你告诉我你要把 a 合并吗?这显然是为了“形式上酷”而不管、抛弃了对变量 a 的内容理解的。
布谷歌 2017-07-25
  • 打赏
  • 举报
回复
@happy4944 当心坑洞
-一个大坑 2017-07-25
  • 打赏
  • 举报
回复
引用 3 楼 gzyes 的回复:
[quote=引用 2 楼 happy4944 的回复:] 我比较懒,都是一个方法只写一个catch
有时我们要自定义异常,捕获到这些异常会做特殊处理。 即便如此,往往也要捕获不同的异常做相应处理的。 比如模拟一个http post请求,要捕获的异常可能有网络异常,参数序列化异常。 [/quote] 一个方法一般做一件事,我也不知道他执行到哪步会出错,我都是按着正常情况想的。
布谷歌 2017-07-25
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
想法不错啊,不过多写一个catch也不费什么事吧。
其实,主要也是考虑到代码的复用。就像多个case做相同的处理。
布谷歌 2017-07-25
  • 打赏
  • 举报
回复
引用 2 楼 happy4944 的回复:
我比较懒,都是一个方法只写一个catch
有时我们要自定义异常,捕获到这些异常会做特殊处理。 即便如此,往往也要捕获不同的异常做相应处理的。 比如模拟一个http post请求,要捕获的异常可能有网络异常,参数序列化异常。
VB.Net常用语法 一:Try………Catch………finally………end try 捕获错误 把一个可能出错的语句放在try后面,如果出错,执行catch语句, catch可以有多个,第一个catch不能捕获的错误,将被下一个catch语句 所捕获。在所有的处理结束后,执行finally语句。 在一个try………end try 过程中可以使用catch与finally两个中的一 个,或者两个一起用, 二:Protected, private, Public 封装控制 这三个关键字一般放在语句最前面,而会置于overloads与Overrides的 后面 public是工程级别外部访问 protected是本族级别以下内部访问 private是不提供非本地访问 三:ByVal sender As Object, ByVal e As System.EventArgs   这是最赏用事件传递参数。被封装于两个对象内, 如果你要传递相应的参数,要在这两个对象里面找,如当前鼠标位置为 e.X e.Y。在VB.Net中有些事件是要自已动手写的, 如窗体鼠标过程,一般加上这个参数在后面的括号内就解决了。 四:重载语法Overloads 如:class class1 public strtem as string overloads public sub subx()重载subx(A状态) strtem=”3” end sub overloads public sub subx(x as string) 重载subx(B状 态) strtem=x end sub end class 如果你如果调用subx()中间没有参数,则VB自动调用重载subx(A状 态), overloads public sub subx()重载subx(A状态) strtem=”3” end sub 结果就是strtem=”3” 如果你这样调用,subx(“这是一个不同的结果”),则VB自动调用重 载subx(B状态) overloads public sub subx(x as string) 重载subx(B状 态) strtem=x end sub 结果就是 strtem=“这是一个不同的结果” 您可以在函数中调用,包括在API中(当然VB.Net不再使用winAPI). 甚至一些至关紧要的过程也不例外:如new过程(此方法王国荣文章中 有介绍) 如: class class1 Overloads Public Sub New() 。。。。。。 。。。。。。 end sub Overloads Public Sub New(s as string) 。。。。。。 。。。。。。 end sub end class 同样有两种调用的方法,如dim as as class1=new class 调用前面 一个无参数的new过程, 而dim asb as class1=new class(“string”)调用第二个new 过程. 切记,如果一个过程或一个函数只有一种状态,不能这样运用。如果您试 图使用overloads关键字,则VB.Net会出现错误的提示要求你移去 overloads 五:Overrides改写 如常见的dispose过程: Overrides Public Sub Dispose() MyBase.Dispose components.Dispose End Sub Overrides表示完全的改写父类提供的过程与函数 不过要记住使用改写的前提是在父类的同一过程或函数的前面也使用了 overrides关键字 六:mybase.new 与mybase.dispose ublic Sub New() MyBase.New Form1 = Me InitializeComponent End Sub Overrides Public Sub Dispose() ' MyBase.Dispose components.Dispose End Sub 这两个过程是任何一个新建工程都会有的,mybase.new是调用当前类的 父类的new过程,同样你也可以加上参数配合父类的重载New过程。如: Overloads Public Sub New () MyBase.New() End Sub Overloads Public Sub New (string) MyBase.New(string) End Sub 七:Structure构造 自定义类型,如: Structure Type1 Dim x as y Dim a as b 。。。。。。。 end structure 这个取代VB6中的使用type………end type方式自定义类型的方法。 八:return返回值 function functionname() return X。。。。。。 end funtion 他的作用与下面一样: function functionname() functionname = X。。。。。。 end funtion

17,747

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧