我很难理解,为什么编译器需要使用 break 语句。由于现在允许跌倒,因此不可能错过它。我看到了 C 或 C++ 中断的原因,但这里是否需要它。
为什么在案件结束后中断不是一种内置行为?它不只是没有语义的语法吗?
对不起,如果这是一个愚蠢的问题。
编辑:仅当箱子为空时才允许跌倒。当有一个语句时,你不能省略 break 语句。所以,这是另一回事。
我很难理解,为什么编译器需要使用 break 语句。由于现在允许跌倒,因此不可能错过它。我看到了 C 或 C++ 中断的原因,但这里是否需要它。
为什么在案件结束后中断不是一种内置行为?它不只是没有语义的语法吗?
对不起,如果这是一个愚蠢的问题。
编辑:仅当箱子为空时才允许跌倒。当有一个语句时,你不能省略 break 语句。所以,这是另一回事。
编译器不太“需要” break 语句,它需要它们。
这是一个设计决定。它使代码在语义上接近 C 和 C++,同时消除了一直是 C 语言有争议的“特性”的失败陷阱。
c# 中的 break 语句是语言创建者的设计决定......基本上他们想要一个“明确”的 break 语句,一个只能以一种方式工作的 break 语句。简而言之,他们不想失败,如果他们只是在不包含“break”的情况下阻止了失败,那将破坏与 c++ 的向后兼容性。
如果 case 表达式为空,则允许失败:
case Foo: // fallthrough allowed.
case Bar:
Console.WriteLine ("Foo or Bar");
break; // required
在同一个联盟中,不允许它是一个常见的误解,就像“你不能在 if 条件中赋值” *
*你可以。规则只是 if 条件中只允许使用布尔值,并且x=false
withbool x;
是一个布尔值。
通常这种代码是一个错误:
// Contrived calculator demostration
decimal x = 5m;
decimal y = 10m;
decimal result = 0m;
string blah = "Divide";
// .. other code omitted
switch(blah) {
case "Divide":
result = x / y;
case "Multiply":
result = x * y;
case "Add":
result = x + y;
case "Subtract":
result = x - y;
default:
MessageBox.Show("Not a valid operation");
}
但是,编译器不能假定缺少的中断是一个错误。据它所知,您确实确实希望案件失败。
简单地假设中断应该在每个案例的末尾,只会用一个错误换一个不同的错误。
因此,相反,语言设计者不允许从非空案例中掉线,如果您省略它们,则会引发错误。
如果您需要在非空案例之间共享代码,请将其放入private
(可能static
)方法中并从那里调用它。
最后一点:空案落空是空案所要做的一切,这就是允许这样做的原因。