我很难理解为什么编译器需要使用break语句。现在允许通过跌倒是不可能错过的。我看到了C或C ++中断的原因,但这里需要它。
为什么在案件结束后不会破坏内置行为?这不是一个没有语义的语法吗?
抱歉,如果这是一个愚蠢的问题。
编辑:只有在案件为空时才允许通过。当有声明时,你不能省略break语句。所以,这是另一回事。
答案 0 :(得分:10)
编译器没有那么多“需要”break语句,它需要它们。
这是一个设计决策,与使用pass-by-reference参数调用方法时要求使用ref
相比。
它保持代码在语义上接近于C和C ++,同时消除了C语言一直是值得商榷的“特性”的漏洞陷阱。
答案 1 :(得分:3)
c#中的break语句是语言创建者的一个设计决定......基本上他们想要一个“明确的”break语句,一个只能单向工作的break语句。简而言之,他们不想要堕落,如果他们刚刚防止掉线而不包括“中断”,那么它就会破坏与c ++的向后兼容性。
答案 2 :(得分:2)
允许使用Fallthrough ::
case Foo: // fallthrough allowed.
case Bar:
Console.WriteLine ("Foo or Bar");
break; // required
不允许这是一个常见的误解,在同一个联盟中,“你不能在if条件中分配值” *
* 你可以。规则只是if条件中只允许布尔值,而x=false
的bool x;
是布尔值。
答案 3 :(得分:0)
通常这种代码是一个错误:
// 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");
}
但是,编译器不能假设丢失的中断是一个bug。据他所知,你确实希望案件能够落实。
简单地假设休息时间应该在每个案例的结尾处,只会针对不同的bug交换一个bug。
所以,相反,语言设计者不允许非空案例掉线,如果省略它们就会抛出错误。
如果您需要在非空案例之间共享代码,请将其放在private
(可能是static
)方法中并从那里调用它。
最后一个注意事项:空案件通过是一个空案件预计会做的,这就是为什么允许这样做。