簡體   English   中英

如何使用超過 8 個值的 System.HashCode.Combine?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM