C#快速入門教程(13)—— switch語句結構
switch語句結構,稱為開關語句或選擇語句,其應用特點是:當有一個資料可能有多個值時,可以根據不同的值進行不同的操作。
回想一下前一課,使用if語句結構判斷方向的示例,實際上,這種情況下就可以使用switch語句結構,其基本格式如下:
switch(<資料>)
{
case <值1>:
{
<語句塊1>
}break;
case <值2>:
{
<語句塊2>
}break;
case <值N>:
{
<語句塊N>
}break;
default:
{
<語句N+1>
}break;
}
這裡,<資料>是可能的資料表示式,一般使用整數或列舉值進行處理;當<資料>的值是<值1>時執行<語句塊1>,當<資料>的值是<值2>時執行<語句塊2>,當<資料>的值是<值N>時執行<語句塊N>;當所有值都不是時,執行default語句塊中的<語句塊N+1>。請注意,在這裡,每個case和default語句塊後都會使用break語句作為結束。
下面的程式碼,我們使用switch語句結構實現方向的判斷。
static void Main(string[] args)
{
int dir = 1;
switch (dir)
{
case 1:
{
Console.WriteLine("上");
}
break;
case 2:
{
Console.WriteLine("右");
}
break;
case 3:
{
Console.WriteLine("下");
}
break;
case 4:
{
Console.WriteLine("左");
}
break;
default:
{
Console.WriteLine("未知方向");
}
break;
}
}
實際上,在case或default語句塊後的程式碼塊並不是真的需要一對花括號,本課中的程式碼只是想區分實際執行程式碼和break語句的應用,去掉花括號的程式碼如下。
static void Main(string[] args)
{
int dir = 1;
switch (dir)
{
case 1:
Console.WriteLine("上");
break;
case 2:
Console.WriteLine("右");
break;
case 3:
Console.WriteLine("下");
break;
case 4:
Console.WriteLine("左");
break;
default:
Console.WriteLine("未知方向");
break;
}
}
另一個需要注意的地方。我們從示例中可以看到,每個case語句塊都是一個可能的資料值,當執行相應的程式碼後,應使用break語句跳出case語句塊,同時也結束switch語句結構的執行。那麼,case語句塊後沒有break語句會怎麼樣呢?先看下面的程式碼。
static void Main(string[] args)
{
int year = 2016;
int month = 2;
int days = 0;
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if (DateTime.IsLeapYear(year))
days = 29;
else
days = 28;
break;
default:
days = -1;
break;
}
Console.WriteLine("{0}年{1}月有{2}天", year, month, days);
}
大家可以看出,此程式碼的功能是返回每個月份的天數,其中,1、3、5、7、8、10、12月為大月,每月有31天;4、6、9、11為小月,每月有30天;而2月則需要判斷當年是否為閏年,閏年時有29天,否則有28天。本例中,我們正是利用了case語句塊沒有break語句的特點,即向下貫穿執行,如值是1時沒有執行程式碼,會執行3值,此時也沒有程式碼,則一直執行到值是12的程式碼,並通過break語句結束,這就是switch語句結構中的自動貫穿特性。
友情提示:.NET Framework類庫真的很厲害,計算某月份的天數時,可以使用DateTime.DaysInMonth()方法,如下面的程式碼。
static void Main(string[] args)
{
int year = 2016;
int month = 2;
int days = DateTime.DaysInMonth(year,month);
Console.WriteLine("{0}年{1}月有{2}天", year, month, days);
}
實際開發中,請注意區別if語句和switch語句的應用特點,並能夠合理選擇這兩種判斷語句結構。if語句結構多用於不同的資料量判斷,而switch語句則用於相同的資料量,但可能有多個值的情況下。
CHY軟體小屋原創作品!
相關文章
- C#快速入門教程(12)—— if語句結構C#
- C#快速入門教程(14)—— 迴圈語句結構C#
- Go快速入門 03 | 控制結構:if、for、switch 邏輯語句Go
- C#快速入門教程(23)—— using語句和IDisposable介面C#
- java基礎筆記 -- 6.選擇結構-if語句-switch語句Java筆記
- 《C#快速入門教程》目錄C#
- C#快速入門教程(16)—— 介面C#
- C#快速入門教程(6)——方法C#
- go語言快速入門教程Go
- C#快速入門教程(26)—— 繪圖C#繪圖
- C#快速入門教程(21)—— 泛型C#泛型
- C#快速入門教程(15)—— 繼承C#繼承
- C#快速入門教程(8)——整數C#
- 《Java從入門到失業》第三章:基礎語法及基本程式結構(3.8):流程控制(選擇語句、if-else語句、switch語句)Java
- 笨辦法學C 練習13:Switch語句
- C++入門教程(9):while 語句C++While
- 物聯網學習教程——switch語句
- C#快速入門教程(28)—— ADO.NETC#
- JavaScript switch語句JavaScript
- JavaScript switch 語句JavaScript
- 13 個示例快速入門 JS 抽象語法樹JS抽象語法樹
- C#快速入門教程(25)—— 日期與時間C#
- C#快速入門教程(22)—— 常用集合型別C#型別
- C#快速入門教程(30)—— 繼續學習C#
- C#快速入門教程(18)—— 異常處理C#
- C++入門教程(3):語句和縮排C++
- switch語句逆向分析
- C#快速入門教程(27)—— SQL Server資料庫C#SQLServer資料庫
- C#快速入門教程(19)—— 索引器與陣列C#索引陣列
- C#快速入門教程(5)——欄位與屬性C#
- C#快速入門教程(11)—— 字元和字串型別C#字元字串型別
- C#快速入門教程(7)——資料型別概述C#資料型別
- C#快速入門教程(2)——程式碼與測試C#
- GO語言————5.3 switch 結構Go
- python 語法總結:Python語法快速入門Python
- Python學習(13)--Lambda表示式和switch語句的實現Python
- C#程式語言及.NET 平臺快速入門指南C#
- golang快速入門(六)特有程式結構Golang