为什么C#编译器需要开关结构break语句?
-
23-09-2019 - |
题
我为什么编译器要求使用break语句有很难理解。这是不可能错过它,因为秋天通过现在允许。我看到在C或C ++的断裂的原因,但是它需要在这里。
为什么它不是一个内置的行为打破后的情况下结束了?是不是只是一个没有任何语义语法?
对不起,如果它是一个愚蠢的问题。
编辑:通过只允许当壳体是空的下降。当有一个说法,你不能省略break语句。所以,这是一个不同的问题。
解决方案
在编译器不会这么多“需要”的break语句,它要求他们。
这是一个设计决定,调用带有一通按引用参数的方法时需要使用ref
的可比性。
它使代码语义接近C和C ++,同时通秋天该消除的缺陷总是的c语言编写一个有争议的“功能”。
其他提示
在C#中的break语句是一个设计决定由语言的创造者......从本质上讲,他们希望有一个“明确的” break语句时,break语句只会工作的一种方式。总之,他们不想落空,并且如果他们刚刚防止落式通过,而不包括“中断”,它将会破坏用C ++向后兼容性。
下通就是如果允许的情况下表达是空的:
case Foo: // fallthrough allowed.
case Bar:
Console.WriteLine ("Foo or Bar");
break; // required
,这是不允许的是在同一个联盟作为共同误解“你不能分配值,如果条件” *
* 可以。该规则仅仅是只有布尔值被允许在如果条件,并用x=false
bool 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
)方法,并从那里调用它。
最后一点:空落的情况下通过的所有空的情况下,预计做,这就是为什么它是允许的。