如何使用具有超过8个值的System.HashCode.Combine?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用具有超过8个值的System.HashCode.Combine?相关的知识,希望对你有一定的参考价值。
。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);
,我不能完全争辩这是否有我不知道的含义。
如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();
,所以您可以在一行中完成所有操作,但是可能有一些原因我没有很快想到。
仍然比自己完成所有内部工作要好得多! :-)
以上是关于如何使用具有超过8个值的System.HashCode.Combine?的主要内容,如果未能解决你的问题,请参考以下文章
Postgresql - 超过 3000 个值的 IN 子句优化
使用张量流服务预测图像-“错误”:“重塑的输入是具有 10000 个值的张量