如何解决HashCode.Combine是可交换的吗?
具体地说,是
---
# Source: serilog/templates/test.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: serilog-configmap
data:
serilog.json: |-
{
"apiVersion": "v1","kind": "Pod","metadata": {
"annotations": {
可交换?即是真的
HashCode.Combine<T1,T2>(T1,T2)
是任何 HashCode.Combine(a,b) == HashCode.Combine(b,a)
和a
吗?
解决方法
为什么不进行简单的实验,例如
public static void Experiment() {
for (int i = 0; i < 100; ++i)
for (int j = 0; j < 100; ++j) {
int a = HashCode.Combine(i,j);
int b = HashCode.Combine(j,i);
if (a != b) {
Console.Write($"Combine({i},{j}) = {a} != {b} = Combine({j},{i})");
return;
}
}
Console.Write("Seems to be commutative");
}
结果:
Combine(0,1) = -839320321 != 864340100 = Combine(1,0)
因此,Hash.Combine
(当前实现,.Net Core 3.1)不是可交换的
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。