找一個例子,假如你替一間遊戲店寫一個系統,需要做以下功能:
- 由產品名稱找到售價
- 由售價找到產品名稱
- 由售價去判斷產品是否存在
那Enum列舉型別都大派上場了。
首先我們簡單地了解一下如何 Construct Enum :
開一個新的Windows Form :
namespace Enum_Example_1 { enum GameConsole { XBox360, PS3, Wii, NDSL, PSP }; public partial class Form1 : Form { public Form1() { InitializeComponent();} private void Form1_Load(object sender, EventArgs e) { GameConsole IHaveThisConsole = GameConsole.XBox360; Console.WriteLine((IHaveThisConsole == GameConsole.PS3).ToString()); //False Console.WriteLine((IHaveThisConsole == GameConsole.XBox360).ToString()); //True } } }
在這裡我們可以看到Enum本身就有對比性,即使你不預設任何Value,但是enum類型本身就是可以分別是否相同。
再來,我們在Form1_Load的程序中,加入
int x = (int)GameConsole.XBox360; Console.WriteLine(x.ToString()); //Output 0
此時,可以你會問,為什麼會輸出 0 呢? 因為根據enum預設,第一個列舉值的值是 0,而每一個接下來的列舉值會遞增 1。如上面的例子,XBox360=0, PS3=1,Wii=2 ...如此類推。而enum可以自訂類型,enum 的核准型別為 byte、sbyte、short、ushort、int、uint、long 或 ulong。
假如你要設定為long的話,語法如下 :
enum GameConsole : long { XBox360, PS3, Wii, NDSL, PSP };
當然我們亦可以預設enum成員的數值 (假如數值是遊戲機的售價):
enum GameConsole { XBox360 = 2400, PS3 = 2600, Wii = 2200, NDSL = 1400, PSP = 1200 };
那現在我們一次過進行產品名稱和售價的反覆對比,在Comment中講解一下,完全Program Code如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Enum_Example_1 { // Construct enum enum GameConsole { XBox360 = 2400, PS3 = 2600, Wii = 2200, NDSL = 1400, PSP = 1200 }; public partial class Form1 : Form { public Form1() { InitializeComponent();} private void Form1_Load(object sender, EventArgs e) { GameConsole IHaveThisConsole = GameConsole.XBox360; Console.WriteLine((IHaveThisConsole == GameConsole.PS3).ToString()); //False Console.WriteLine((IHaveThisConsole == GameConsole.XBox360).ToString()); //True //Find Xbox360 Price int x = (int)GameConsole.XBox360; Console.WriteLine(x.ToString()); //Output 2400 string price_1 = "1400"; GameConsole C = (GameConsole)Enum.Parse(typeof(GameConsole), price_1); Console.WriteLine(C.ToString()); //Found NDSL string price_2 = "1234"; GameConsole C2 = (GameConsole)Enum.Parse(typeof(GameConsole), price_2); Console.WriteLine(C2.ToString()); //Nothing , output 1234 //Alternate method string s = Enum.GetName(typeof(GameConsole), 1200); Console.WriteLine(s); // Found PSP try { string product_name = "GameBoy"; GameConsole C3 = (GameConsole)Enum.Parse(typeof(GameConsole), product_name); //Nothing Found And throw Exception } catch (Exception ex) { Console.WriteLine(ex.ToString()); } //exception } } }
看到這裡,你的腦袋應該有點發熱,或者曾幾何時你使用多過一個ArrayList或List
沒有留言:
發佈留言