官术网_书友最值得收藏!

2.1.1 條件語句

當程序中需要進行兩個或兩個以上的選擇時,可以根據條件判斷來選擇將要執行的一組語句,C#提供的選擇語句有if語句和switch語句。

2.1.1.1 if語句

if語句是最常用的選擇語句,它根據布爾表達式的值來判斷是否執行后面的內嵌語句格式,其形式為

當布爾表達式的值為真,則執行if后面的內嵌語句embedded-statement;當布爾表達式的值為假,則程序繼續執行。如果有else語句,則執行else后面的內嵌語句,否則繼續執行下一條語句。

例如下面的例子用來對一個浮點數x進行四舍五入,結果保存到一個整數i中:

如果if或else之后的嵌套語句只包含一條執行語句,則嵌套部分的大括號可以省略;如果包含了兩條以上的執行語句,對嵌套部分一定要加上大括號;如果程序的邏輯判斷關系比較復雜,通常會采用條件判斷嵌套語句,if語句可以嵌套使用,即在判斷之中又有判斷,具體形式如下:

此時應該注意每一條else與離它最近且沒有其他else與之對應的if相搭配,比如有下面一條語句:

它實際上應該等價于下面的寫法:

注意C#的if語句與C、C++不同,即if后的邏輯表達式必須是布爾類型的。

請看一個判斷是否往應用程序傳送參數的例子:

程序清單 2-1:

其中args.Length==0是一個布爾表達式,但是C或者C++程序員可能會習慣編寫像這樣的代碼:

這在C#中是不允許的,因為if語句僅允許布爾類型的結果,而字符串的Length屬性對象返回一個整型(integer),編譯器將報告錯誤信息。

2.1.1.2 switch語句

if語句每次判斷只能實現兩條分支,如果要實現多種選擇的功能,那么可以采用switch語句。switch語句根據一個控制表達式的值選擇一個內嵌語句分支來執行。它的一般格式為

switch語句的控制類型,即其中控制表達式(controlling-expression)的數據類型可以是sbyte、byte、short、ushort、uint、long、ulong、char、string或枚舉類型(enum-type)。每個case標簽中的常量表達式(constant-expression)必須屬于或能隱式轉換成控制類型,如果有兩個或兩個以上case標簽中的常量表達式值相同,編譯時將會報錯。switch語句中最多只能有一個default標簽。我們舉一個例子來說明switch語句是如何實現程序的多路分支的:假設考查課的成績按優秀、良好、中等、及格和不及格分為五等,分別用4、3、2、1、0來表示,但實際的考卷為百分制,對應的分數分別為90~100、80~89、70~79、60~69、60分以下。下面的程序將考卷成績x轉換為考查課成績y,代碼如下:

下面的例子判斷傳遞給應用程序的參數的有無及位數:

程序清單 2-2:

使用switch語句時需注意以下兩點:

1.不準遍歷

C和C++語言允許switch語句中case標簽后不出現break語句,但C#不允許這樣,它要求每個標簽項后使用break語句或跳轉語句goto,即不允許從一個case自動遍歷到其他case,否則編譯時將報錯。

一個程序用于計算一年中已度過的天數,month表示月份,day表示日期,計算結果保存在total中。為簡便起見把閏年的情況排除在外,C和C++程序員會利用一點技巧來實現這個程序:

然而這種寫法在C#中是不允許的。很難保證任何人在編程時都不會忘記在case后加上break語句,這時往往會造成一些不易察覺的錯誤,所以在C#中如果標簽項沒有出現break語句或跳轉語句goto,編譯器將會要求程序員加上。

如果想像C、C++那樣,執行完后繼續遍歷其他的語句,那也不難,只需要明確地加入這兩條跳轉語句即可:

? goto case label:跳至標簽語句執行

? goto default:跳至default標簽執行

那樣上面的程序可以改寫為

在避免了C、C++中常出現的由于漏寫break而造成的錯誤的同時不準遍歷的原則,還使得我們可以任意排列switch語句中的case項而不會影響switch語句的功能。另外,一般說來每個switch項都以break、goto、case或goto、default結束,但實際上任何一種不導致遍歷的結構都是允許的,例如throw和return語句同樣可以跳出控制之外,因而下例是正確的:

2.把字符串當成常量表達式

VB的程序員可能已經習慣把字符串當成常量表達式來使用,但C和C++卻不支持這一點,C#的switch語句與C、C++的另一個不同點是:C#可以把字符串當成常量表達式來使用,所以switch語句的控制類型可以是string類型。

下面的例子實現浮動窗口提示。在Windows操作系統中,把鼠標移到某一個控件上停留幾秒,將會出現一個浮動提示,說明該控件的作用。例子中的GetButtonCaption用于獲得按鈕上的文字,ShowMessage表示在浮動提示窗口中顯示信息:

主站蜘蛛池模板: 金山区| 开封县| 昭平县| 新余市| 彭州市| 西藏| 徐州市| 垣曲县| 娱乐| 思茅市| 正安县| 成都市| 富阳市| 偏关县| 新疆| 沙湾县| 翁牛特旗| 聊城市| 晴隆县| 汨罗市| 新昌县| 连山| 安阳市| 新余市| 亚东县| 定州市| 四川省| 章丘市| 明星| 宝清县| 郴州市| 麻江县| 马公市| 砀山县| 衡阳县| 揭东县| 新营市| 方山县| 邯郸市| 江源县| 泽州县|