Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Lấy HashCode của instance UInt64 trong C#

Mục đích

Phương thức GetHashCode() của kiểu ulong (UInt64) trả về mã băm (hash code) 32-bit đại diện cho giá trị. Dùng cho bảng băm (hashtable, dictionary) hoặc so sánh nhanh.

Ví dụ 1: HashCode của giá trị thường và MinValue

using System;

public class Demo
{
    public static void Main()
    {
        ulong val1 = 8768768;
        ulong val2 = UInt64.MinValue; // 0

        Console.WriteLine($"HashCode của val1 ({val1}) = {val1.GetHashCode()}");
        Console.WriteLine($"HashCode của val2 (MinValue = {val2}) = {val2.GetHashCode()}");
    }
}

Kết quả

HashCode của val1 (8768768) = 8768768
HashCode của val2 (MinValue = 0) = 0

Ví dụ 2: HashCode của giá trị lớn và MaxValue

using System;

public class Demo
{
    public static void Main()
    {
        ulong val1 = 89879878;
        ulong val2 = UInt64.MaxValue; // 18446744073709551615

        Console.WriteLine($"HashCode của val1 ({val1}) = {val1.GetHashCode()}");
        Console.WriteLine($"HashCode của val2 (MaxValue) = {val2.GetHashCode()}");
    }
}

Kết quả

HashCode của val1 (89879878) = 89879878
HashCode của val2 (MaxValue) = 0

Giải thích

  • Với các giá trị nhỏ (< 2^32), GetHashCode() thường trả về chính giá trị đó (cast ngầm sang int).
  • UInt64.MaxValue có hash code là 0 do cách triển khai nội bộ (xuất hiện trong ví dụ).
  • Hash code **không đảm bảo duy nhất** (có thể va chạm).
  • Không dùng hash code để bảo mật hoặc định danh duy nhất.

Lưu ý khi dùng trong Dictionary/HashSet

  • Nếu override Equals, **bắt buộc** override GetHashCode để đảm bảo tính nhất quán.
  • Hai object bằng nhau (Equals = true) phải có cùng hash code.