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

การดึงรหัสแฮช (Hash Code) ของอินสแตนซ์ใน C#

ภาพรวม

Object.GetHashCode() คืนค่า hash code ของอินสแตนซ์ ใช้สำหรับการจัดเก็บใน hash table การเปรียบเทียบเร็ว ไม่รับประกันค่าไม่ซ้ำ (collision อาจเกิดขึ้น)

ตัวอย่างที่ 1: ดึง Hash Code ของอาร์เรย์สตริง

using System;

public class Demo
{
    public static void Main()
    {
        string[] arr = { "tom", "amit", "kevin", "katie" };
        Type t1 = arr.GetType();
        Type t2 = t1.GetElementType();

        Console.WriteLine("Type = " + t2.ToString());
        Console.WriteLine("Hash Code = " + t1.GetHashCode());
    }
}

ผลลัพธ์

Type = System.String
Hash Code = 9144789

ตัวอย่างที่ 2: ดึง Hash Code ของ Enum และข้อมูลเพิ่มเติม

using System;

public class Demo
{
    enum Vehicle { Car, Bus, Bike, Airplane }

    public static void Main()
    {
        try
        {
            Vehicle v = Vehicle.Bike;
            Type type = v.GetType();

            Console.WriteLine("Hash code = " + type.GetHashCode());

            string[] str = type.GetEnumNames();
            Console.WriteLine("GetEnumNames() = " + str);

            Type type2 = type.GetEnumUnderlyingType();
            Console.Write("Enum Underlying type = " + type2);

            Array arrObj = type.GetEnumValues();
            Console.Write("Values = " + arrObj);

            Console.WriteLine("\nListing constants ..");
            for (int i = 0; i < str.Length; i++)
                Console.Write("{0} ", str[i]);
        }
        catch (ArgumentException e)
        {
            Console.WriteLine("Not an enum!");
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}

ผลลัพธ์

Hash code = 44757566
GetEnumNames() to return the constant name = System.String[]
Enum Underlying type = System.Int32
Values = Demo+Vehicle[]
Listing constants ..
Car Bus Bike Airplane

สรุป

  • GetHashCode() คืนค่า int ใช้สำหรับ hashing
  • ค่า hash code อาจต่างกันในแต่ละครั้งรัน (implementation dependent)
  • ไม่ควรใช้ hash code เป็น unique identifier
  • Enum มีเมธอดพิเศษ: GetEnumNames, GetEnumValues, GetEnumUnderlyingType