Enums

Enum คืออะไร

Enum เป็นประเภทข้อมูลที่เป็นชุดของตัวเลขจำนวนเต็ม โดยค่าที่ใช้ในการประกาศ enum นั้นจะเป็น String literal ใดๆ โดยค่าเหล่านี้ถือว่าเป็นค่าคงที่ของจำนวนเต็ม รูปแบบการใช้ enum ในภาษา C# เป็นดังนี้:

enum Name{ Value1, Value2, ... };

โดยคำสั่ง enum นั้นจะใช้สำหรับการสร้าง enum และ Name เป็นชื่อของ enum ที่สร้างขึ้น และภายในวงเล็บ {} นั้นจะเป็นชุดค่าของ enum โดยมาสามารถเป็น literal ใดๆ ที่ C# อนุญาติให้ทำได้ ค่าของ enum สามารถมีได้ตั้งแต่หนึ่งหรือหลายค่า โดยแต่ละค่านั้นจะคั่นด้วยเครื่องหมาย Commas

ต่อไปมาดูตัวอย่างการสร้างและใช้งานของ enum ในภาษา C# ซึ่งเราจะเขียนโปรแกรมโดยการใช้ enum เก็บค่าคงที่วันในสัปดาห์

using System;

namespace EnumExample
{
class Program
{
enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

static void Main(string[] args)
{
int a = (int)Days.Sunday;
int b = (int)Days.Monday;
Console.WriteLine("Sunday is number #" + a);
Console.WriteLine("Monday is number #" + b);
}
}
}

ในตัวอย่าง เราได้ประกาส enum ของวันขึ้นมา โดยค่าของมันจะเรียงจาก Sunday ถึง Saturday ซึ่งมันแทนได้กับค่าจำนวนเต็มที่เริ่มจาก 0 Monday นั้นมีค่าเป็น 1 Tuesday มีค่าเป็น 2 ซึ่งค่าจะเพิ่มขึ้นทีละหนึ่งไปเรื่อยๆ จนถึง Saturday ซึ่งจะมีค่าเป็น 6

int a = (int)Days.Sunday;
int b = (int)Days.Monday;

ในการเปรียบเทียบหรือกำหนดค่าในภาษา C# นั้น ประเภทของข้อมูลต้องจะต้องตรงกันเสมอ นั้นคือเราต้องทำการ casting ข้อมูลก่อนทุกครั้ง ในตัวอย่างเราได้แปลงค่าของ enum ให้เป็น Integer และข้างล่างนี้คือผลของการรันโปรแกรมนี้

Sunday is number #0
Monday is number #1

นี่เป็นผลลัพธ์ในการทำงานของโปรแกรม เราได้แสดงค่าจากตัวแปร enum ทีไ่ด้ผลลัพธ์ในรูปแบบของ Integer ซึ่งหมายความว่า เราสามารถอ้างถึงค่าของ 0 ด้วย Sunday หรือค่าของ 1 ด้วย Monday

นอกจากนี้เรายังสามารถสร้างตัวแปรประเภท Enum เพื่อที่จะนำมาเก็บข้อมูล และ casting ข้อมูลเป็นในรูปแบบของ enum ได้

using System;

namespace EnumExample
{
class Program
{
enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

static void Main(string[] args)
{
Days weekend = Days.Monday;

if (weekend == Days.Sunday || weekend == (Days)6) {
Console.WriteLine("This is week end.");
}
else
{
Console.WriteLine("This is week day.");
}
}
}
}

จากตัวอย่าง เราได้สร้างตัวแปร enum คือ weekend มาเก็บข้อมูล มันสามารถนำไปเปรียบเทียบกับข้อมูลประเภท enum ได้เลยหรือตัวเลขก็ได้

Custom enum indexes

นอกจากนี้ ในภาษา C# ยังมีความสามารถที่จะให้เรากำหนดค่าให้กับ enum เองได้ โดยปกติค่าของ enum จะเริ่มจาก 0 และเพิ่มขึ้นทีละ 1 สำหรับสมาชิกตัวต่อไป คุณสามารถกำหนดค่าให้กับ enum เพื่อให้การเขียนโปรแกรมนั้นมีความหมายมากขึ้น มาดูตัวอย่างของ enum ที่กำหนดค่าเอง ซึ่งเป็นโปรแกรมในการควบคุมการทำงานของรถยนต์ เราใช้ enum ในการเก็บสถานะการทำงานแบบต่างๆ

using System;

namespace EnumExample
{
class Program
{
enum CarStatus {
Poweroff = 0,
Runing = 5,
Stoped = 2,
Overhead = 10,
Runing_backward = 9
};

static void Main(string[] args)
{
int[] schedul = { 5, 5, 10, 2, 0 };

for (int i = 0; i <schedul.Length; i++) {
Console.WriteLine("Step " + (i + 1) + ": " + (CarStatus)schedul[i]);
}
}
}
}

ในตัวอย่าง เราได้ใช้ enum ในการเก็บ state ของรถยนต์ เราได้เก็บขั้นตอนการทำงานของรถยนต์ในรูปแบบ Integer ในอาเรย์ schedul และเราใช้คำสั่ง for loop ในการวนอ่านค่า และแสดงค่าของ enum ในรูปแบบของ String โดยการใช้วิธี Casting ข้อมูลไปเป็นประเภทของ enum และข้างล่างเป็นลัพธ์ของโปรแกรม

Step 1: Runing
Step 2: Runing
Step 3: Overhead
Step 4: Stoped
Step 5: Poweroff

โปรแกรมนั้นมีการทำงานทั้งหมด 5 ขั้นตอน การการกำหนดการทำงานไว้ในอาเรย์

ในบทนี้ คุณจะได้รู้จักและเรียนรู้วิธีการใช้ enum ในภาษา C# ซึ่งมันสามารถนำไปประยุกต์ใช้ได้ในหลายสถานะการณ์ และการสร้าง enum ด้วยการกำหนดค่าเอง


บทความเกี่ยวกับ Enums

Enums ในภาษา Visual Basic

Enum (อีนัม) เป็นประเภทข้อมูลที่ให้คุณสามารถกำหนดชื่อให้กับค่าคงที่ได้ โดยค่าของ Enum นั้นจะใช้กับชุดของข้อมูลแบบจำนวนเต็ม แต่เราสามารถอ้างถึงค่าคงที่นั้นได้ผ่า...