[英]How to use System.HashCode.Combine with more than 8 values?
.NET Standard 2.1 / .NET Core 3引入了System.HashCode
可以快速將字段和值組合為哈希碼,而無需關心底層實現。
但是,它僅提供最多 8 個值的Combine
方法重載。 如果我有一個包含 9 個值(3x3 矩陣)甚至 16 個值(4x4 矩陣)的類,我該怎么辦?
我應該簡單地將兩個Combine
調用相加,並在每個調用中傳遞盡可能多的值嗎?
public override int GetHashCode()
=> HashCode.Combine(M11, M12, M13, M21, M22, M23, M31, M32) + HashCode.Combine(M33);
看看來源,我不能完全爭論這是否可能有我不知道的影響。
正如您實際鏈接自己的System.HashCode
文檔中所述,簡單地添加由連續的Combine
調用創建的哈希碼不是解決方案。
靜態Combine
方法只允許最多 8 個值是正確的,但這些似乎只是舒適的方法。 要組合 8 個以上的值,您必須求助於實例化HashCode
並像這樣使用它:
public override int GetHashCode()
{
HashCode hash = new HashCode();
hash.Add(M11);
hash.Add(M12);
hash.Add(M13);
hash.Add(M21);
hash.Add(M22);
hash.Add(M23);
hash.Add(M31);
hash.Add(M32);
hash.Add(M33);
return hash.ToHashCode();
}
這確實讓我想知道為什么沒有HashCode
構造函數接受params object[] values
這樣您就可以在一行中完成所有這些,但可能有一些原因我沒有很快想到這一點。
仍然比自己完成所有內部工作要好得多! :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.