使用跳躍陳述式執行分支,該語句導致立即傳遞程式控制。跳躍陳述式中使用下列關鍵字:
break
continue
goto
return
//---------------------------------------------------------------------------------
break 語句終止它所在的最近的封閉迴圈或 switch 語句。控制傳遞給終止語句後面的語句(如果有的話)。此語句的形式如下:
break;
樣本
在此例中,條件陳述式包含一個可以從 1 計數到 100 的計數器;但 break 語句在計數達到 4 後終止迴圈。
// statements_break.cs
using System;
class BreakTest
{
public static void Main()
{
for (int i = 1; i <= 100; i++)
{
if (i == 5)
break;
Console.WriteLine(i);
}
}
}
輸出
1
2
3
4
樣本
此例在 switch 語句中示範了 break 的用法。
// statements_break2.cs
// break and switch
using System;
class Switch
{
public static void Main()
{
Console.Write("Enter your selection (1, 2, or 3): ");
string s = Console.ReadLine();
int n = Int32.Parse(s);
switch(n)
{
case 1:
Console.WriteLine("Current value is {0}", 1);
break;
case 2:
Console.WriteLine("Current value is {0}", 2);
break;
case 3:
Console.WriteLine("Current value is {0}", 3);
break;
default:
Console.WriteLine("Sorry, invalid selection.");
break;
}
}
}
輸入
1
樣本輸出
Enter your selection (1, 2, or 3): 1
Current value is 1
如果輸入了 4,則輸出為:
Enter your selection (1, 2, or 3): 4
Sorry, invalid selection.
//-----------------------------------------------------------------------------------
continue 將控制傳遞給它所在的封閉迭代語句的下一個迭代。它的形式為:
continue;
樣本
在此例中,計數器初始化為從 1 到 10 計數。通過與運算式一起使用 continue 語句 (i < 9),跳過了位於 continue 與 for 體結尾之間的語句。
// statements_continue.cs
using System;
class ContinueTest
{
public static void Main()
{
for (int i = 1; i <= 10; i++)
{
if (i < 9)
continue;
Console.WriteLine(i);
}
}
}
輸出
9
10
//-----------------------------------------------------------------------------
goto 語句將程式控制直接傳遞給標記語句。它的形式為下列之一:
goto identifier;
goto case constant-expression;
goto default;
其中:
identifier
一個標籤。
constant-expression
一個 switch-case 標籤。
備忘
在第一種形式中,identifier 指示位於當前體中的標籤、相同的詞法範圍或 goto 語句的封閉範圍。
goto 的一個通常用法是將控制傳遞給特定的 switch-case 標籤或 switch 語句中的預設標籤。
goto 語句還用於跳出深嵌套迴圈。
如果程式中從未引用過標籤,則可能發出一條警告訊息。有關標籤的更多資訊,請參見 3.3 聲明。
樣本
有關使用 goto 將控制傳遞給特定 switch-case 標籤的樣本,請參見 switch 樣本。
樣本
下例示範了使用 goto 跳出嵌套迴圈。
// statements_goto.cs
// Nested search loops
using System;
public class GotoTest1
{
public static void Main()
{
int x = 200, y = 4;
int count = 0;
string[,] myArray = new string[x,y];
// Initialize the array:
for (int i = 0; i < x; i++)
for (int j = 0; j < y; j++)
myArray[i,j] = (++count).ToString();
// Read input:
Console.Write("Enter the number to search for: ");
// Input a string:
string myNumber = Console.ReadLine();
// Search:
for (int i = 0; i < x; i++)
for (int j = 0; j < y; j++)
if (myArray[i,j].Equals(myNumber))
goto Found;
Console.WriteLine("The number {0} was not found.", myNumber);
goto Finish;
Found:
Console.WriteLine("The number {0} is found.", myNumber);
Finish:
Console.WriteLine("End of search.");
}
}
輸入
44
樣本輸出
Enter the number to search for: 44
The number 44 is found.
End of search.
樣本
// statements_goto2.cs
// CS0159 expected
// Labels outside the scope
using System;
class UnreachableCode
{
public static void Main()
{
int x = 55;
Console.WriteLine("x = {0}", x);
if (x == 55)
{
x = 135;
goto A; // Error
}
x = x + 1;
for (int i=1; i<=5; i++)
{
A: Console.WriteLine(i);
}
Console.WriteLine("x = {0}", x);
}
}
在前面的樣本中,goto 語句引用其範圍之外的標籤 A。編譯器將發出錯誤資訊:
No such label 'A' within the scope of the goto statement
由於從未引用過此標籤,因此還可能發出一條警告訊息。
如果將標籤 A 移到 for 迴圈的開始處,程式將正常編譯和運行,即:
A: for (int i=1; i<=5; i++) { // Now the program compiles.
//------------------------------------------------------------
return 語句終止它出現在其中的方法的執行並將控制返回給調用方法。它還可以返回可選 expression 的值。如果方法為 void 類型,則可以省略 return 語句。此語句的形式如下:
return [expression];
其中:
expression
由方法返回的值。expression 不與 void 類型的方法一起使用。
樣本
在下例中,A() 方法以 double 值的形式返回 Area 變數。
// statements_return.cs
using System;
class ReturnTest
{
static double CalculateArea(int r)
{
double area;
area = r*r*Math.PI;
return area;
}
public static void Main()
{
int radius = 5;
Console.WriteLine("The area is {0:0.00}", CalculateArea(radius));
}
}
輸出
The area is 78.54