C#异常处理的范围

C#异常处理的范围,第1张

概述C#中的异常处理范围是什么?我目前正在审查我团队中另一位程序员的一些代码,他的功能有点像这样: private void function1() {try {function2();}catch (Exception ex) {EmailException(ex.message());}}private void function2() {try {// Do stuff} C#中的异常处理范围是什么?我目前正在审查我团队中另一位程序员的一些代码,他的功能有点像这样:

private voID function1() {try {function2();}catch (Exception ex) {EmailException(ex.message());}}private voID function2() {try {// Do stuff}catch (Exception ex) {// Handle it here}}

大部分处理代码都在function2中.但是他的报告处理是在function1中. function2中的异常会回到发送报告的function1处理程序吗?

编辑:
感谢您的回复,他们都非常有帮助!

解决方法 在.net中,当发生异常时,系统将搜索堆栈上的嵌套try块以确定是否存在可以捕获异常的catch块.这发生在任何finally块运行之前.如果没有任何可以捕获异常的块,系统将调用“未处理的异常”处理程序而不运行任何finally块.

如果确定存在可以捕获异常的块的系统,它将开始展开堆栈并运行最终与内部try块关联的块,直到它将堆栈一直展开到它找到的catch块,或者在finally块的执行中抛出异常.在后一种情况下,先前的例外将被放弃而不再进一步处理;异常处理将重新启动新抛出的异常.

虽然想要捕获异常之间存在语义差异,而仅仅想要对其进行 *** 作(但让它被视为未被捕获),但是在C#中没有简洁的方式来表达这种区别;捕获异常的代码有望解决它.在C#中可以做的最好的事情是使用一个catch(指示系统的异常处理逻辑,认为一个将捕获异常),然后使用throw,表示一个人不想解决它(这个将在内部“finally”块运行后发生).在诸如vb.net之类的其他语言中,可以在最终块运行之前对异常进行 *** 作而不捕获它们.虽然没有大量的情况下捕获和抛出与捕获异常而不捕获异常的情况不同,但很少有区别重要的情况.如果一个人正在使用C#并且希望避免对可能希望在终结器块运行之前从内部代码捕获异常的周围代码产生敌意,那么最好的方法可能是编写一个用vb编写的异常处理包装器方法(或者让其他人使用执行此 *** 作),将其编译为DLL,然后使用lambdas提供这样的函数方法,以便在适当的try / filter / catch / finally块中调用它.

总结

以上是内存溢出为你收集整理的C#异常处理的范围全部内容,希望文章能够帮你解决C#异常处理的范围所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1222208.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存