條件語句
條件語句可以根據條件是否滿足或根據表達式的值控制代碼的執行分支。C#有兩個控制代碼分支的結構:if語句,測試特定條件是否滿足;switch語句,它比較表達式和許多不同的值。
if語句
對於用過編程語言的人來說,其語法是非常直觀的:
if(condition)
statement(s)
else
statement(s)
如果在條件中要執行多個語句,就需要用花括號({……})把這些語句組合為一個塊。
bool isZero;
if(i==0)
...{
isZero=true;
Console.WriteLine("i is zero");
}
else
...{
isZero=false;
Console.WriteLine("i is not zero");
}
還可以單獨使用if語句,不加else語句。也可以合並else if子句,測試多個條件。
using System;
namespace ling.test
...{
class test1
...{
static void Main(string[] args)
...{
string input;
input=Console.ReadLine();
if(input=="")
...{
Console.WriteLine("it`s empty string");
}
else if(input.Length<5)
...{
Console.WriteLine("it`s less than 5 charracters");
}
else if(input.Length<10)
...{
Console.WriteLine("it`s least 5 but less than 10 characters");
}
}
}
}
添加到if子句中的else if語句的個數沒有限制。對於if,如果條件分支中只有一條語句,就無需使用花括號,但是為了保持以至,許多程序員只要使用if語句,就加上花括號。
if子句中的表達式必須等於布爾值。if語句不能直接測試整數,必須明確的把返回的整數轉換為true或false。
switch語句
switch...case語句適合從一組互斥的分支中選擇一個執行分支。其形式是switch參數後面跟一組case子句。如果switch參數中表達式的值等於某個case子句旁邊的某個值,就執行該case子句中的代碼,只需使用break語句標記每個case代碼的結尾即可。
switch(test)
...{
case 1:
Console.WriteLine("it`s 1");
break;
case 2:
Console.WriteLine("it`s 2");
break;
case 3:
Console.WriteLine("it`s 3");
break;
default:
Console.WriteLine("it`s not 1,2 or 3");
break;
}
注意case的值必須是常量表達式,不允許使用變量。如果激活了塊中靠前的一個case子句,後面的case子句就不會被激活,除非使用goto語句特別標記要激活後面的case子句。但有一種例外情況,如果一個case子句為空,就可以從這個case跳到下一個case上,這樣就可以處理兩個或多個case子句了。
switch( country)
...{
case "eu":
case "uk":
case "us":
language="English";
break;
case "at":
case "de":
language="German";
break;
}
switch語句的一個有趣的地方是case子句的排放順序是無關緊要的,甚至可以把default子句放在最前面。因此任何兩個case子句都不能相同,包括值相同的不同常量:
const string england ="uk";
const string britain="uk";
switch(country)
...{
case england:
case britain: //錯誤
language="English";
break;
}
循環
C#提供了4種不同的循環機制(for,while,do...while,foreach)。
for循環
for循環提供的迭代循環機制是在執行下一次迭代前,測試是否滿足某個條件,語法如下:
for(執行第一次迭代前要計算的表達式; 每次迭代循環前要測試的表達式; 每次迭代完要計算的表達式)
{for循環是所謂的預測試循環,因為循環條件是在執行循環語句前計算的,如果循環條件為假,循環語句就根本不會執行。for循環非常適合於一個語句或語句塊重復執行預定的次數。
嵌套的for循環非常常見,在每次迭代外部循環時,內部循環都要徹底執行完畢。
while循環
while循環也是一個預測試循環。但它只有一個表達式。while循環最常用於循環開始前不知道重復執行一個語句或語句塊的次數的情況。
while(每次迭代新循環前要測試的表達式)
...{
循環體...
}
do...while循環
do...while循環是while循環的後測試版本。該循環的測試條件要在執行完循環體之後執行,因此適合於至少執行一次循環體的情況。
do
...{
循環體...
} while(每次迭代新的循環前要測試的表達式)
foreach循環
foreach循環可以迭代集合中的每一鄉項。要使用集合對象,就必須支持IEnumerable接口。它不能改變集合中的各項的值。
foreach(int temp in test)
...{
Console.WriteLine(temp);
}
跳轉語句
goto語句
goto語句可以直接跳轉到程序中用標簽指定的另一行:
goto Label1;
Console.WriteLine("hallo");
Label1:
Console.WriteLine("world");
它有2個限制:不能跳轉到像for循環這樣的代碼塊中,也不能跳出類的范圍,不能退出try...catch塊後面的finally塊。
在大多數情況下不允許使用它。但是在一個地方使用它是相當方便的——在switch語句的case子句之間跳轉。
break語句
在switch語句中使用它退出某個case語句。也可用於退出for,foreach,while和do...while循環,該語句會使控制流執行後面的語句,如果break放在switch語句或循環外部就會產生編譯錯誤。
continue語句
continue語句類似於break,也必須在for,foreach,while或do...while循環中使用。但它只能退出循環的當前迭代,開始執行循環的下一次迭嗲,而不是退出循環。
return語句
return語句用於退出類的方法,把控制權返回方法的調用者,如果方法有返回類型,return語句必須返回這個類型的值。