我为什么编译器要求使用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)方法,并从那里调用它。

最后一点:空落的情况下通过的所有空的情况下,预计做,这就是为什么它是允许的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top