为了账号安全,请及时绑定邮箱和手机立即绑定

有人还在C#中使用[goto]吗?为什么?

有人还在C#中使用[goto]吗?为什么?

慕哥6287543 2019-11-29 14:43:23
我想知道是否还有人在C#中使用“ goto”关键字语法,以及这样做的可能原因是什么?我倾向于将任何导致读者跳过代码的语句视为不良做法,但想知道是否存在使用这种语法的可信场景?
查看完整描述

3 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

在某些(很少)情况下,goto可以真正提高可读性。实际上,您链接到的文档列出了两个示例:


goto的常见用法是将控制权转移到特定的切换用例标签或switch语句中的默认标签。


goto语句对于摆脱深层嵌套的循环也很有用。


这是后一个示例:


for (...) {

    for (...) {

        ...

        if (something)

            goto end_of_loop;

    }

}


end_of_loop:

当然,还有其他方法可以解决此问题,例如将代码重构为函数,在其周围使用伪块等(有关详细信息,请参见此问题)。作为附带说明,Java语言设计人员决定完全禁止goto并引入带标签的break语句。


查看完整回答
反对 回复 2019-11-29
?
青春有我

TA贡献1784条经验 获得超8个赞

我记得这部分


switch (a)     

    case 3: 

        b = 7;

        // We want to drop through into case 4, but C# doesn't let us

    case 4: 

        c = 3;

        break; 

    default: 

        b = 2;

        c = 4;

        break; 

}

对于这样的事情


switch (a)     

{

    case 3: 

        b = 7;

        goto case 4;    

    case 4: 

        c = 3;

        break;     

    default: 

        b = 2;

        c = 4;

        break;

}

推荐这个


查看完整回答
反对 回复 2019-11-29
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

我不记得曾经使用过goto。但是,也许它可以改善您永远不想退出的永久循环的意图(不break,但您仍然可以return或throw):


forever: {

  // ...

  goto forever;

}

再说一次,一个简单的while (true)就足够了...


同样,您可以在希望循环的第一次迭代在循环的中间开始的情况下使用:在此处查看示例。


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 990 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信