ใน C# การแปลงค่า Enum เป็นค่าจำนวนเต็ม (int) ทำได้ง่ายด้วยการ Type Casting โดยตรง เนื่องจาก Enum มี Underlying Type เป็น int โดยค่าเริ่มต้น (0, 1, 2, ...)
หลักการพื้นฐาน
// ประกาศ Enum
public enum Vehicle { Car, Bus, Truck }
// Cast เป็น int
int a = (int)Vehicle.Car; // ผลลัพธ์: 0
int b = (int)Vehicle.Bus; // ผลลัพธ์: 1
int c = (int)Vehicle.Truck; // ผลลัพธ์: 2
โค้ดตัวอย่างสมบูรณ์
using System;
public class Demo
{
public enum Vehicle { Car, Bus, Truck }
public static void Main()
{
int a = (int)Vehicle.Car;
int b = (int)Vehicle.Bus;
int c = (int)Vehicle.Truck;
Console.WriteLine("Car = {0}", a);
Console.WriteLine("Bus = {0}", b);
Console.WriteLine("Truck = {0}", c);
}
}
ผลลัพธ์
Car = 0 Bus = 1 Truck = 2
ข้อมูลเพิ่มเติมที่ควรทราบ
1. กำหนดค่าเองได้ (Custom Values)
public enum StatusCode
{
Success = 200,
NotFound = 404,
ServerError = 500
}
// ใช้งาน
int code = (int)StatusCode.NotFound; // 404
2. ใช้ Enum.GetValues() และ Enum.GetNames() สำหรับ Iteration
foreach (var name in Enum.GetNames(typeof(Vehicle)))
{
var value = (int)Enum.Parse(typeof(Vehicle), name);
Console.WriteLine($"{name} = {value}");
}
3. Pattern Matching (C# 7.0+)
Vehicle v = Vehicle.Bus;
if (v is Vehicle.Car) { /* ... */ }
int num = v switch
{
Vehicle.Car => 0,
Vehicle.Bus => 1,
Vehicle.Truck => 2,
_ => -1
};
4. Enum.TryParse() สำหรับการแปลงปลอดภัย
string input = "Truck";
if (Enum.TryParse(input, out Vehicle result))
{
int value = (int)result; // 2
}
สรุป: ใช้ (int)EnumValue เพื่อดค่า int โดยตรง ใช้ Enum.TryParse เมื่อแปลงจาก String และพิจารณากำหนดค่า Custom ให้ Enum เมื่อต้อง Map กับค่าจริงในระบบ (เช่น HTTP Status Code)