如何使用具有超过8个值的System.HashCode.Combine?

问题描述 投票:0回答:1

。NET Standard 2.1 / .NET Core 3introduceSystem.HashCode,可以将字段和值快速组合为哈希码,而不必关心基础实现。

但是,它仅提供System.HashCode方法重载,最多8个值。如果我的班级有9个值(3x3矩阵)或什至16个值(4x4矩阵)怎么办?

我应该简单地将两个Combine调用加起来,在每个调用中传递尽可能多的值吗?

Combine

看着public override int GetHashCode() => HashCode.Combine(M11, M12, M13, M21, M22, M23, M31, M32) + HashCode.Combine(M33); ,我不能完全争辩这是否有我不知道的含义。

c# hashcode gethashcode
1个回答
2
投票

source中所述,简单地累加由连续的System.HashCode documentation you actually linked yourself调用创建的哈希码是not解决方案。

静态System.HashCode方法最多只能允许8个值,但这似乎只是舒适方法,这是正确的。要组合8个以上的值,您必须求助于实例化Combine并像这样使用它:

Combine

这的确使我感到奇怪,为什么没有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(); } ,所以您可以在一行中完成所有操作,但是可能有一些原因我没有很快想到。

仍然比自己完成所有内部工作要好得多! :-)

© www.soinside.com 2019 - 2024. All rights reserved.