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)

相关推荐

  • 英语阅读理解练习,英语阅读理解改怎么练习

    技术英语阅读理解练习,英语阅读理解改怎么练习重视句子理解就没有问题英语阅读理解练习,但是要注意这里绝对不是咬文嚼字扣每句话具体什么意思,应该是注重句子间的联系,及文章的主题思想,但凡阅读一定会有你难以理解的单词或句子,一

    生活 2021年10月21日
  • 如何理解Go错误处理之用panic取代rr != nil的模式

    技术如何理解Go错误处理之用panic取代rr != nil的模式这篇文章主要介绍“如何理解Go错误处理之用panic取代rr != nil的模式”,在日常操作中,相信很多人在如何理解Go错误处理之用panic取代rr

    攻略 2021年10月21日
  • GBase8s数据库有什么特点

    技术GBase8s数据库有什么特点这篇文章主要讲解了“GBase8s数据库有什么特点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“GBase8s数据库有什么特点”吧!注意

    攻略 2021年11月12日
  • Ajax与IE6缓存问题及解决方法

    技术Ajax与IE6缓存问题及解决方法本篇文章给大家分享的是有关Ajax与IE6缓存问题及解决方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。向大家简单介

    攻略 2021年11月26日
  • Python 爬取朋友圈最新方法!!

    技术Python 爬取朋友圈最新方法!! Python 爬取朋友圈最新方法!!在几年前,互联网上曾经出现过一款生成朋友圈相册的产品。但是它的流程说起来很不互联网:首先,需要添加指定的微信号,并且给这个微

    礼包 2021年12月18日
  • 如何使用QGIS绘制铁路轨迹geojson

    技术如何使用QGIS绘制铁路轨迹geojson这期内容当中小编将会给大家带来有关如何使用QGIS绘制铁路轨迹geojson,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 下载并安装

    攻略 2021年11月10日