เมธอด Equals() ของ Enum ใช้เปรียบเทียบว่า Enum Instance สองตัวมีค่าเท่ากันหรือไม่ โดยเปรียบเทียบ Underlying Value
ตัวอย่างพื้นฐาน
using System;
class Program
{
enum Products
{
HardDrive,
PenDrive,
Keyboard
}
enum ProductsNew
{
Mouse,
HeadPhone,
Speakers
}
static void Main()
{
Products prod1 = Products.HardDrive; // 0
Products prod2 = Products.HardDrive; // 0
ProductsNew newProd1 = ProductsNew.HeadPhone; // 1
ProductsNew newProd2 = ProductsNew.Speakers; // 2
Console.WriteLine("prod1 == prod2: " + prod1.Equals(prod2)); // True
Console.WriteLine("newProd1 == newProd2: " + newProd1.Equals(newProd2)); // False
// เทียบกับ Object
Console.WriteLine("prod1.Equals((object)prod2): " + prod1.Equals((object)prod2)); // True
// เทียบ Enum ต่าง Type (Compile Error ถ้าไม่ Cast)
// Console.WriteLine(prod1.Equals(newProd1)); // Error: Cannot convert ProductsNew to Products
}
}
ผลลัพธ์
prod1 == prod2: True newProd1 == newProd2: False prod1.Equals((object)prod2): True
รายละเอียด
Enum.Equals(object)- Override จาก ValueType เปรียบเทียบ Underlying Value และ Type- Enum ต่าง Type กัน ไม่เท่ากัน แม้ค่าตัวเลขจะเท่ากัน (Type Safety)
- ใช้
Object.Equals(a, b)สำหรับ Null Safety
การเปรียบเทียบแบบปลอดภัย (Null-safe)
Products? p1 = Products.HardDrive; Products? p2 = null; bool equal = Object.Equals(p1, p2); // False (ไม่โยน Exception) bool equal2 = p1?.Equals(p2) ?? false; // False
Best Practice
- ใช้
==Operator สำหรับ Enum (Overload มาให้แล้ว เปรียบเทียบ Value) - ใช้
Enum.HasFlag()สำหรับ Flags Enum - Override Equals/GetHashCode ใน Struct/Custom Class ไม่จำเป็นสำหรับ Enum