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