13

我很难理解,为什么编译器需要使用 break 语句。由于现在允许跌倒,因此不可能错过它。我看到了 C 或 C++ 中断的原因,但这里是否需要它。

为什么在案件结束后中断不是一种内置行为?它不只是没有语义的语法吗?

对不起,如果这是一个愚蠢的问题。

编辑:仅当箱子为空时才允许跌倒。当有一个语句时,你不能省略 break 语句。所以,这是另一回事。

4

4 回答 4

10

编译器不太“需要” break 语句,它需要它们。

这是一个设计决定。它使代码在语义上接近 C 和 C++,同时消除了一直是 C 语言有争议的“特性”的失败陷阱。

于 2010-03-02T13:16:27.910 回答
3

c# 中的 break 语句是语言创建者的设计决定......基本上他们想要一个“明确”的 break 语句,一个只能以一种方式工作的 break 语句。简而言之,他们不想失败,如果他们只是在不包含“break”的情况下阻止了失败,那将破坏与 c++ 的向后兼容性。

于 2010-03-02T13:15:18.540 回答
2

如果 case 表达式为空,允许失败:

case Foo:  // fallthrough allowed.
case Bar:
    Console.WriteLine ("Foo or Bar");
    break; // required

在同一个联盟中,不允许它是一个常见的误解,就像“你不能在 if 条件中赋值” *


*你可以。规则只是 if 条件中只允许使用布尔值,并且x=falsewithbool x; 一个布尔值。

于 2012-01-31T09:20:30.997 回答
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");

}

但是,编译器不能假定缺少的中断是一个错误。据它所知,您确实确实希望案件失败。

简单地假设中断应该在每个案例的末尾,只会用一个错误换一个不同的错误。

因此,相反,语言设计者不允许从非空案例中掉线,如果您省略它们,则会引发错误。

如果您需要在非空案例之间共享代码,请将其放入private(可能static)方法中并从那里调用它。

最后一点:空案落空是空案所要做的一切,这就是允许这样做的原因。

于 2010-03-02T15:15:10.573 回答