เพื่อนๆนักพัฒนาหลายคนก็คงจะรู้จัก enum กันพอสมควรแล้วนะคะ วันนี้เรามาทำความรู้จักเจ้า Enum กันให้มากขึ้นกว่าเดิมกันดีกว่านะคะ ว่านอกจากเราจะดึงค่า Integer ที่เก็บค่าในตัวแปร หรือ Tostring() เป็นค่าstring ตามชื่อของตัวแปร Enum แล้ว เรายังสามารถ ดึงค่า String เป็นประโยคยาวๆได้โดยที่ไม่จำเป็นต้องเหมือนกับชื่อตัวแปรแล้วนะคะ เอาล่ะค่ะ เรามาเริ่มจากการทำความรู้จักเจ้าตัว Enum กันตั้งแต่เริ่มต้นเพื่อระลึกความจำกันก่อนละกันนะคะ ^^
Enumeration จะมีชนิดเป็น integer type ซึ่ง เราสามารถกำหนดกลุ่มของข้อมูลได้ (User-defined)
ในการสร้าง enumeration เราจะใช้ keyword คำว่า enum ดังนี้
public enum Colors { White, Black, Red, Green, Blue } |
ในตัวอย่างนี้สร้าง enum ที่ชื่อว่า Colors โดยมีสมาชิกอยู่ 5 สมาชิกคือ White,Black,Red,Green,Blue
โดยสมาชิกต่างๆของ enum ถ้าเราไม่ได้กำหนดค่าเริ่มต้นจะมีค่าเริ่มต้นจาก 0 ดังนี้
white = 0
Black =1
Red =2
Green=3
Blue=4
ในการเรียกใช้งาน enum
Colors c = Colors.Green; //สร้างตัวแปร c ขึ้นมาเพื่อเรียกใช้สมาชิกที่ชื่อ Green
ตัวอย่าง enum
using System; public enum Colors { White, Black, Red, Green, Blue } public class TestEnum { public static void Main() { Colors c = Colors.Blue; Console.WriteLine(c); Console.ReadLine(); } } |
ผลลัพธ์จะแสดง Blue
จากตัวอย่างนี้ถ้าต้องการให้แสดงเป็น integer type เราก็เขียนได้ดังนี้
Console.WriteLine((int)c);
ผลลัพธ์จะได้ 4
เราสามารถกำหนดค่าให้กับสมาชิกของ enum ได้ดังนี้
public enum Colors { Red = 10, Green =20, Blue=30 } |
ตัวอย่าง
using System; public enum Colors { Red = 10, Green =20, Blue=30 } public class TestEnum { public static void Main() { Colors c = Colors.Green; Console.WriteLine((int)c); Console.ReadLine(); } } |
ผลลัพธ์จะได้ 20
นอกจากนี้สามารถเขียนรับค่า value มาจาก enum ได้อีกแบบคือ
Colors c = (Colors)Enum.Parse(typeof(Colors), “Blue”, false);
ตัวอย่าง
using System; public enum Colors { Red = 10, Green =20, Blue=30 } public class TestEnum { public static void Main() { Colors c = (Colors)Enum.Parse(typeof(Colors), “Blue”, false); Console.WriteLine((int)c); Console.ReadLine(); } } |
ผลลัพธ์จะได้ 30
กรณีที่เราจะใช้ tostring เข้ามาใช้ก็สามารถทำได้
ตัวอย่าง
using System;
public enum Colors |
ผลลัพธ์จะได้ Green
นอกจากเราจะสามารถ tostring ให้ได้ค่า string เหมือนกับชื่อ enum แล้วนั้น ผู้พัฒนาทราบหรือไม่คะ ว่า enum เราสามารถกำหนดคำอธิบายได้เป็นประโยค และสามารถดึงค่านั้นมาใช้ได้ หรือพูดง่ายๆว่าเราสามารถดึงค่า enum มาใช้ในรูปแบบประโยคได้ง่ายๆ ดังตัวอย่างค่ะ
public enum Colors {[Description(“This is Red”)] //เราต้องกำหนด Description attributes ว่าเราต้องการจะให้แสดงข้อความอย่างไร Red = 10, Green =20, Blue=30 } |
ส่วนนี้จะเป็น code ส่วนที่จะดึงข้อมูล Description ตามที่กำหนด ที enum
public static string GetEnumDescription(Enum value)
{ FieldInfo fi = value.GetType().GetField(value.ToString()); DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes( typeof(DescriptionAttribute), false); if (attributes != null && attributes.Length > 0) return attributes[0].Description; else return value.ToString(); } |
ตัวอย่างการเรียกใช้
var myEnumDescriptions = Colors.Red.GetDescription(); |
ผลลัพธ์จะได้ This is Red
ผู้เขียนหวังว่านี่คงจะเป็นอีกทางเลือกนึงของผู้พัฒนา ในการนำไปพัฒนาโปรแกรมต่อไปนะคะ ^_^
แหล่งอ้างอิง
https://stackoverflow.com/questions/2650080/how-to-get-c-sharp-enum-description-from-value
http://yaritc.blogspot.com/2012/01/enum-struct-by-paedotnet.html