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.MaxValuecó 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** overrideGetHashCodeđể đảm bảo tính nhất quán. - Hai object bằng nhau (Equals = true) phải có cùng hash code.