.NET 标准 2.1 / .NET 核心 3介绍 https://github.com/dotnet/corefx/issues/14354 System.HashCode https://learn.microsoft.com/en-us/dotnet/api/system.hashcode快速将字段和值组合成哈希码,而无需关心底层实现。
然而,它仅提供Combine
方法重载最多 8 个值。如果我的类有 9 个值(3x3 矩阵)甚至 16 个值(4x4 矩阵),我该怎么办?
我应该简单地把两个相加吗Combine
调用,在每个调用中传递尽可能多的值?
public override int GetHashCode()
=> HashCode.Combine(M11, M12, M13, M21, M22, M23, M31, M32) + HashCode.Combine(M33);
看着source https://github.com/dotnet/corefx/blob/master/src/Common/src/CoreLib/System/HashCode.cs,我不能完全争论这是否可能产生我不知道的影响。
如中所述System.HashCode您自己实际链接的文档 https://learn.microsoft.com/en-us/dotnet/api/system.hashcode,只需将连续创建的哈希码相加Combine
调用的是not解决方案。
静态的说法是正确的Combine
方法最多只允许 8 个值,但这些似乎只是舒适方法。要组合超过 8 个值,您必须诉诸实例化HashCode
并像这样使用它:
public override int GetHashCode()
{
HashCode hash = new();
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
所以你可以在一行中完成所有这些,但可能有一些原因我没有很快想到这一点。
还是比自己完成所有内部工作要好得多! :-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)