问题描述
我想在原有的trycatch基础之上封装一些自己的内容,请问可以封装或者重写trycatch吗
解决方案
解决方案二:
那叫嵌套如果原始的catch不抛出来,那你再套n层也是无效的
解决方案三:
trycatch可以重写吗
解决方案四:
你干嘛要重写trycatch呢?捕获异常后你把异常以你自己方式抛出去就行了,没必要重写啊?
解决方案五:
重写这个有何意义呢????
解决方案六:
我需要在catch中增加自己的逻辑
解决方案七:
引用5楼shangtongchao的回复:
我需要在catch中增加自己的逻辑
你的逻辑就已经有问题了
解决方案八:
不是重写,那叫异常封装,看下Entlib的Exception模块
解决方案九:
引用5楼shangtongchao的回复:
我需要在catch中增加自己的逻辑
你写一个统一提交的方法,在这个方法里面进行trycatch,这样的话不就变现实现所有的trycatch都能加入你自己的东西了嘛
解决方案十:
我想在出现异常后自动输出日志信息,也就是在catch中进行信息输出,信息输出模块已经写好,现在需要在每个catch中手动添加,如果可以对trycatch进行一定的修改实现自动输出
解决方案十一:
我理解楼主是想要直接重写try-catch关键字咯,我也很想知道可不可以,所以我点进来看了,结果...我也想如果可以自己重写的话,底层就可以统一将catch到的信息统一写到一个地方,再抛给上层去处理。如mytry{}mycatch(Exceptionex){//此处就不需要在调用写日志之类的}而现在我所知道的异常处理方式都是如下面这样:try{}catch(Exceptionex){LogHelper.Log(ex);//每个异常地方都需要写这句话,重复工作量,还会漏了写。//其他异常处理逻辑}
解决方案十二:
对啊,不只信息输出,还有一些其他的通用操作都可以封装进来,而不必每次都写一堆重复的代码
解决方案十三:
大神快来啊啊
解决方案十四:
引用12楼shangtongchao的回复:
大神快来啊啊
Application.ThreadException+=newThreadExceptionEventHandler(Application_ThreadException);//捕获系统所产生的异常。privatestaticvoidApplication_ThreadException(objectsender,ThreadExceptionEventArgse){try{//仅记录系统异常if(e.Exception.GetType().Name!=typeof(CustomException).Name)LogUserOperate.Write(e.Exception);//写入异常日志Msg.ShowException(e.Exception);//处理系统异常}catch(Exceptionex){Msg.ShowError("Application_ThreadException:rn"+ex.Message);}}
解决方案十五:
没有这东西。。
解决方案:
可以写个方法,在catch部分调用这个方法
解决方案:
引用13楼qq_21045521的回复:
Quote: 引用12楼shangtongchao的回复:
大神快来啊啊Application.ThreadException+=newThreadExceptionEventHandler(Application_ThreadException);//捕获系统所产生的异常。privatestaticvoidApplication_ThreadException(objectsender,ThreadExceptionEventArgse){try{//仅记录系统异常if(e.Exception.GetType().Name!=typeof(CustomException).Name)LogUserOperate.Write(e.Exception);//写入异常日志Msg.ShowException(e.Exception);//处理系统异常}catch(Exceptionex){Msg.ShowError("Application_ThreadException:rn"+ex.Message);}}
这个方式只能是辅助处理未被处理的异常。如果存在逻辑是(实际开发中也有很多这样的逻辑),捕获异常后还会有后续处理的就不适用了。如:intresult=1;try{...result=2;}catch(Exceptionex){result=3;}if(result==1){}elseif(result==2){}elseif(result==3){}
解决方案:
引用16楼Yokeqi的回复:
Quote: 引用13楼qq_21045521的回复:
Quote: 引用12楼shangtongchao的回复:
大神快来啊啊Application.ThreadException+=newThreadExceptionEventHandler(Application_ThreadException);//捕获系统所产生的异常。privatestaticvoidApplication_ThreadException(objectsender,ThreadExceptionEventArgse){try{//仅记录系统异常if(e.Exception.GetType().Name!=typeof(CustomException).Name)LogUserOperate.Write(e.Exception);//写入异常日志Msg.ShowException(e.Exception);//处理系统异常}catch(Exceptionex){Msg.ShowError("Application_ThreadException:rn"+ex.Message);}}
这个方式只能是辅助处理未被处理的异常。如果存在逻辑是(实际开发中也有很多这样的逻辑),捕获异常后还会有后续处理的就不适用了。如:intresult=1;try{...result=2;}catch(Exceptionex){result=3;}if(result==1){}elseif(result==2){}elseif(result==3){}
已经处理的异常你还记录了干嘛
解决方案:
重写应该不可能了,机制如此
解决方案:
关键字怎么重写。。。
解决方案:
你的思路有问题。我对你的需求的理解是,你想在很多业务代码中用trycatch。1、首先,这就不是正确的用法。你应该利用异常的机制,也就是它是逐层抛出的,你只需要在顶层来统一处理异常即可,不需要到处写trycatch2、如果你真需要在某些地方写trycatch,又想重用某些代码,那么用委托就可以简单实现:///<summary>///执行并捕捉线程中的异常///</summary>///<paramname="fun"></param>///<paramname="isSilent"></param>///<returns>1成功-1失败</returns>publicintThreadExceptionCatch(ThreadExceptionCatchCodefun,boolisSilent=false){try{fun();return1;}catch(Exceptionex){if(!isSilent){//异常处理Resolve(ex,"CustomThreadException",true);}return-1;}}
解决方案:
我之前的帖子有问到类似的问题。http://bbs.csdn.net/topics/390945182最终解决方案就是用AOP。可以看下这篇博客http://blog.csdn.net/yanghua_kobe/article/details/6917228
解决方案:
请用AppDomain.FirstChanceExceptionEvent,具体的看微软给的示例,我想这一定就是你想要的https://msdn.microsoft.com/en-us/library/system.appdomain.firstchanceexception.aspx
解决方案:
引用21楼ducker3590的回复:
我之前的帖子有问到类似的问题。http://bbs.csdn.net/topics/390945182最终解决方案就是用AOP。可以看下这篇博客http://blog.csdn.net/yanghua_kobe/article/details/6917228
AOP是需要改源码的,而楼主这种功能只有Hook才能做到,不过很幸运,微软竟然给了这样的Hook事件,那就是AppDomain.FirstChanceExceptionEvent