gpt4 book ai didi

c# - 为什么我需要使用 break?

转载 作者:可可西里 更新时间:2023-11-01 07:48:38 26 4
gpt4 key购买 nike

我想知道为什么 C# 要求我在 switch 语句中使用 break,尽管 fall-through 语义在定义上是不允许的。因此,编译器可以在每个 case block 的末尾生成 break 并为我省去麻烦。

但是,有一种情况(已经在本网站上讨论过)我可以想出这可能是显式使用 break 的原因:

switch (foo) {
case 0:
case 1:
bar();
break;
default:
break;
}

此处,如果 foo 的值为 0 或 1,则调用方法 bar()

如果编译器自己生成 break 语句,这个选项将真正意义上的 break。是这样吗,这是强制休息的原因还是有其他充分的理由?

最佳答案

这个问题预设了一个谎言,因此无法回答。该语言不需要在切换部分的末尾进行中断。该语言要求 switch 部分的语句列表必须有一个不可到达的端点。 “break”只是具有此属性的最常用语句。用“return;”、“goto case 2;”、“throw new Exception();”结束 switch 部分是完全合法的。或“while (true) {}”(或者在某些情况下,继续,尽管这通常不是一个好主意。)

我们需要一个带有不可到达端点的语句列表的原因是为了强制执行“不掉线”规则。

如果您的问题更好地表述为“当我未能生成带有无法到达终点的语句列表的切换部分时,编译器为什么不通过代表我插入一个 break 语句来自动修复我的错误?”,那么答案是 C# 不是一种“猜测开发人员可能的意思然后蒙混过关”的语言。有些语言是——例如 JScript——但 C# 不是。

我们认为,犯错误的 C# 程序员希望被告知这些错误,以便他们能够有意识地、有意识地纠正错误,这是一件好事。我们的客户告诉我们,他们不希望编译器猜测他们的意思并希望得到最好的结果。这就是为什么 C# 也不会像 JScript 那样猜测您打算将丢失的分号放在哪里,或者当您尝试修改只读变量时会静默失败,就像 JScript 那样,等等。

关于c# - 为什么我需要使用 break?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1568348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com