== 比較第一個欄位 → 滿足規則 1== 不用第一欄位 → 破壞規則 1ValueType.GetHashCode() 使用第一個欄位readonly → 滿足規則 2readonly struct)取決於第一欄位的值域分布。若第一欄位經常相同(如 DateTime _epoch 只存日期),所有同一天建立的物件雜湊碼相同 → 衝突嚴重、效能劣化。
| 型別 | 預設 GetHashCode() | 正確性 | 效能 |
|---|---|---|---|
| 參考型別 | 物件 ID | 正確(除非覆寫 ==) | 差(分布集中) |
| 實值型別 | 第一欄位雜湊碼 | 僅當第一欄位不可變且分布佳 | 視第一欄位而定 |
Equals 比較的欄位readonly)public class Customer
{
public string Name { get; set; } // 可變!
public override int GetHashCode() => Name.GetHashCode(); // 危險!
}
修改 Name 後雜湊碼改變,導致雜湊表找不到該物件。