关于 On Error Resume Next 和跳转,交流一下

yonex00345 2013-01-09 11:03:11
关于在c#中实现On Error Resume Next的效果,不知有什么好的方法,于是我尝试用Reflector反编译
VB.Net原代码:

On Error Resume Next
MsgBox("1")
MsgBox("2")
MsgBox("3")

反编译成C#:

int VB$ResumeTarget;
try
{
int VB$CurrentStatement;
Label_0001:
ProjectData.ClearProjectError();
int VB$ActiveHandler = -2;
Label_0009:
VB$CurrentStatement = 2;
Interaction.MsgBox("1", MsgBoxStyle.OkOnly, null);
Label_0018:
VB$CurrentStatement = 3;
Interaction.MsgBox("2", MsgBoxStyle.OkOnly, null);
Label_0027:
VB$CurrentStatement = 4;
Interaction.MsgBox("3", MsgBoxStyle.OkOnly, null);
goto Label_00A4;
Label_003B:
VB$ResumeTarget = 0;
switch ((VB$ResumeTarget + 1))
{
case 1:
goto Label_0001;

case 2:
goto Label_0009;

case 3:
goto Label_0018;

case 4:
goto Label_0027;

case 5:
goto Label_00A4;

default:
goto Label_0099;
}
Label_005F:
VB$ResumeTarget = VB$CurrentStatement;
switch (((VB$ActiveHandler > -2) ? VB$ActiveHandler : 1))
{
case 0:
goto Label_0099;

case 1:
goto Label_003B;
}
}
catch (object obj1) when (?)
{
ProjectData.SetProjectError((Exception) obj1);
goto Label_005F;
}
Label_0099:
throw ProjectData.CreateProjectError(-2146828237);
Label_00A4:
if (VB$ResumeTarget != 0)
{
ProjectData.ClearProjectError();
}

结果发现编译后 On Error Resume Next 就是 try catch + goto 的
很多人都说用跳转不好,但是.Net编译成IL后还是用跳转,这是为什么呢?
还有,在C#中实现 On Error Resume Next 还有什么好方法?
...全文
135 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
嘴哥臭鼬 2013-01-09
  • 打赏
  • 举报
回复
try catch 的catch语句中处理错误啊
bdmh 2013-01-09
  • 打赏
  • 举报
回复
如果你觉得很好,你就用,没什么好与不好,用好了就好
yonex00345 2013-01-09
  • 打赏
  • 举报
回复
沉了,顶一下,谁能解释一下为什么GOTO不好吗?
yonex00345 2013-01-09
  • 打赏
  • 举报
回复
其实我想知道的是为什么很多人都说用goto不好?

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧