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月24日
  • 部署主从数据库

    技术部署主从数据库 部署主从数据库IP主机名节点192.168.233.11mysql1主数据库节点192.168.233.13mysql2从数据库节点一 安装
    (1)修改主机名
    用 Xshell 连接

    礼包 2021年12月5日
  • Hibernate配置文件的示例分析

    技术Hibernate配置文件的示例分析小编给大家分享一下Hibernate配置文件的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!有

    攻略 2021年11月17日
  • python中怎么处理逗号(python中逗号怎么输入)

    技术Python中怎么用逗号这篇文章主要讲解了“Python中怎么用逗号”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中怎么用逗号”吧!1 逗号分割列表,元组

    攻略 2021年12月17日
  • JAVA虚拟机的几个命令行参数是什么

    技术JAVA虚拟机的几个命令行参数是什么这篇文章将为大家详细讲解有关JAVA虚拟机的几个命令行参数是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

    攻略 2021年12月2日
  • HBASE表如何迁移

    技术HBASE表如何迁移这篇文章主要介绍了HBASE表如何迁移,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。以下方法可以实现重命名,以及不同namespa

    攻略 2021年12月8日