流控制(C# 与 Java)

更新:2007 年 11 月

Java 和 C# 中的流控制语句(如 if else 和 switch 语句)非常相似。

分支语句

分支语句根据特定条件更改运行时的程序执行流。

if、else 和 else if

在 Java 和 C# 这两种语言中,这些语句完全相同。

switch 语句

在两种语言中,switch 语句均提供条件性多重分支操作。但是,它们之间也有不同。在 Java 中,您可以“跳过”一个 case 而执行下一个 case,除非此 case 的末尾使用了 break 语句。而 C# 要求在每个 case 的末尾都使用 break 或 goto 语句。否则,编译器将产生以下错误:

控制不能从一个 case 标签贯穿到另一个 case 标签。

注意:如果 case 没有指定任何要在匹配此 case 时执行的代码,控制将贯穿到随后的 case。如果 switch 语句中使用了 goto,那么您只能跳到同一个 switch 中的另一个 case 块。如果要跳到默认 case,应使用 goto default.;否则,应使用 goto case cond,此处的 cond 就是您希望跳到的那个 case 的匹配条件。与 Java switch 的另一点区别是:在 Java 中,switch 语句只能使用整型变量,而在 C# 中可以使用字符串变量。

例如,以下代码在 C# 中为有效代码,而在 Java 中为无效代码:

static void Main(string[] args)
{
    switch (args[0])
    {
        case "copy":
            //...
            break;

        case "move":
            //...
            goto case "delete";

        case "del":
        case "remove":
        case "delete":
            //...
            break;

        default:
            //...
            break;
    }
}

goto 的返回

在 Java 中,goto 是不能实现的保留关键字。但是,您可以使用具有 break 或 continue 的标签语句来实现与 goto 类似的用途。

C# 允许 goto 语句跳到标签语句处。但是请注意,要跳到某个特定的标签处,goto 语句必须在此标签的范围内。换言之,尽管 goto 可以从一个类中跳出,从而跳到此类之外或退出 try...catch 语句中的 finally 块,但不能使用它跳到某个语句块内。大多数情况下,建议不要使用 goto,因为它不是一种面向对象编程的好做法。

请参见

概念

C# 编程指南

其他资源

Visual C#

C# 编程语言(针对 Java 开发人员)