流控制(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,因为它不是一种面向对象编程的好做法。