Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

C# Enum.Equals() Method: ตรวจสอบความเท่ากันของ Enum

เมธอด 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