VB.NET如何使用On Error语句

技术VB.NET如何使用On Error语句这篇文章主要介绍VB.NET如何使用On Error语句,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!VB.NET推荐使用Try...End Try块来

本文主要介绍VB.NET如何使用On Error语句。很详细,有一定的参考价值。感兴趣的朋友一定要看完!

VB。NET建议使用“尝试”.End Try块用于结构化异常处理,但为了保证兼容性,还借用了VB。NET的on错误语句。其实,On Error并不能算是VB的优势,因为使用它会破坏程序的结构,让有异常处理的程序很难理解和调试。但是我一直很惊讶VB工程师是怎么实现的,因为On Error可以像Try一样让异常跳转变得灵活,不受限制。首先看看Try是如何实现的:

publifunction f1()as integer trydimnasinteger=2 \ ncatchexaxexceptionmsgbox(例如。message) end try end函数这是最简单的异常处理程序。通过Reflector进行反汇编(如果使用ILDasm,不要选择“try-catch”),可以发现整个过程已经被翻译成19条指令。注意这句话:tryl _ 0000 tol _ 0006 catchee exception _ 0006 tol _ 0022这是一个典型的试块。指定要在catch处直接捕获的异常,然后指定catch区域的位置,这非常清楚。注意这两句话:

L _ 00073360 callprojectdata。set projecterror _ 001 b : call projectdata。clearprojecterror,我们可以看到这两个句子在catch块的开头和结尾。深入这两个过程,我发现它记录了Err对象的异常。看来用Err也是一种甜的语法,一种苦的表现,这两句是凭空加的(好在不太复杂)。

接下来,我编写了一个类似于这个函数的函数,使用On语句来处理异常:

public function F2()as integeronegrootatchlocktomtinnasinteger=2 \nexitf功Catchblock: msgbox (err。描述)结束功能这个并不比之前的流程复杂,但是拆解之后,它的IL代码其实有47条指令,刚才只有19条!主要变化是尝试部分,现在是这样的:tryl _ 0000 tol _ 0022 filter l _ 0022 l _ 0036 tol _ 0060请注意,捕获已消失,但过滤器出现。我从来没有在C#生成的IL中见过滤镜。我查询的Meta Data部分文档,filter大概可以做一些过滤,只有满足一定的条件才能进入异常处理块。在本例中,L_0022指令一开始是一个过滤器,它是:

l _ 0022: isinstexceptionl _ 0027: br false . sl _ 00333 l _ 00293360 dloc . SV _ 4L _ 002 b : br false . sl _ 00333 l _ 002d : dloc . 3l _ 002 e : br true . sl _ 00333 l _ 0030333 6 LDC . 1l _ 0004SL _ 0034 l _ 00: LDC . I 4.0 l _ 00343360 end filter是代码异常处理部分的开头。而L0030之前的代码是过滤器的判断部分,V_4和V_3是VB自己添加的变量,保存错误码。在整个反汇编中,我发现设计用来处理异常的代码实际上在IL中的try块中,也就是说程序的结构不再是常规的try.catch块,生成异常的语句与处理异常的语句放在一起,而实际处理异常的指令是很多繁琐的跳转语句。

让我们看看我写的第三个例子:

public function F3()as integererrorresumentextdimnasinteger=2 \ n函数该值有2行,使用了VB强大的语法杀手——On Error Resume Next。它将忽略所有异常,并让代码继续在生成异常的语句旁边执行。猜猜这个函数产生了多少个IL指令?答案是50!它比普通的On Error长。它的实现我就不多说了,和前面的on语句差不多。然而,数字50似乎提醒大家不要懒于使用On Error来处理程序中的异常,因为代价是不可接受的。

* * *一个例子是VB。NET的When语句,可以过滤Catch部分:

public function f1()asintegerdimnasInteger=0 trydimasininteger=2 \ nCThexaxexceptionwhen=0 msgbox(例如。message) end try end函数中,when语句判断了变量N,并且只在n=0时才进入处理部分。听到“过滤器”这个词后,我们已经猜到它是通过尝试来实现的.过滤器。没错。这里的过滤器主要处理ex是否为Exception类型,n是否等于零等。过滤成功后,会转到异常处理部分进行处理。这次VB生成的代码比VB规则多了。NET的on error语句,其结构相当清晰。

以上就是《如何在VB中使用On Error语句》一文的全部内容。NET”。感谢您的阅读!希望分享的内容对大家有所帮助。更多相关知识,请关注行业资讯频道!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/130825.html

(0)

相关推荐

  • mysql临时表的问题有哪些

    技术mysql临时表的问题有哪些这篇文章主要为大家展示了“mysql临时表的问题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql临时表的问题有哪些”这篇文章吧。

    攻略 2021年11月6日
  • 火线字母,请问插头上的l。n那个是火线

    技术火线字母,请问插头上的l。n那个是火线按我国现行标准,GB2681中第3条依导线颜色标志电路时,一般应该是相线-A相黄色,B相绿色,C相红色。零线-淡蓝色。地线是黄绿相间。如果是三相插座,左边是零线,中间(上面)是地

    生活 2021年10月23日
  • 抖音播放量怎么提升,如何刷抖音播放量?

    技术抖音播放量怎么提升,如何刷抖音播放量?自己是否上了热门,抖音并不会特别的对我们进行通知,所以大家唯一能看出自己上了热门的方法就是看关注、点赞、留言的数量,一般来说上了热门以后,这些数据就会进行一个快速的更新。很多人都

    测评 2021年10月20日
  • 战时管制是指,什么叫战时状态战时措施

    技术战时管制是指,什么叫战时状态战时措施它是指当国家安全受到严重威胁时,将军队处于最高级的备战准备,并向全国发布战争动员令的一种战斗紧张形势战时管制是指。交战国之间的敌对状态。一旦进入战争状态,交战国之间的外交关系、经济

    生活 2021年10月29日
  • C++11:maketuple

    技术C++11:maketuple C++11:make_tuple翻译来自:https://thispointer.com/c11-make_tuple-tutorial-example/
    本文中,我

    礼包 2021年11月23日
  • 如何选择合适的美国云服务器

    技术如何选择合适的美国云服务器在决定满足您需求的理想美国云服务器时,至少需要考虑五个因素。在所有这些因素上获得最高级别将确保您的网站能够提供出色的用户体验。这些因素是:速度 您的美国云服务器提供商的速度是您应该考虑的首要

    礼包 2021年11月26日