gpt4 book ai didi

c# - DateTime.Now 是否有自己的 GetHashCode 实现来提供唯一的哈希值?

转载 作者:太空狗 更新时间:2023-10-29 23:54:54 25 4
gpt4 key购买 nike

MSDN 文章 here声明,GetHashCode() 的默认实现不保证唯一的结果,不应用作标识符。所以我的问题是 DateTime.Now 是否有自己的实现来给出唯一的哈希值。感谢帮助

最佳答案

首先,依赖 DateTimeGetHashCode 的特定实现是错误的。那是对你隐藏的东西。依赖隐藏的细节是一种糟糕的代码味道;他们可能随时改变你并破坏你的代码。

其次,事实证明 DateTime 内部存储了一个 64 位整数 DateTime.Ticks测量自纪元(0001 年 1 月 1 日午夜)以来 100 纳秒单位的数量。因此,DateTime 实例至少需要 64 位信息。但是哈希码是 32 位整数,因此哈希码不可能是唯一的(您不能将 64 位空间映射到 32 位空间而不会发生冲突)。

明确地说,您可以查看DateTime.GetHashCode的源代码:

public override int GetHashCode() {
long internalTicks = this.InternalTicks;
return (((int) internalTicks) ^ ((int) (internalTicks >> 0x20)));
}

如您所见,它做了一些“折叠”以将 InternalTicks 压缩成 32 位整数。

一般来说,不要依赖哈希码的唯一性。输入空间一般大于被散列到的空间(所有32位整数的空间)。

如果您绝对必须有一个唯一的键来表示 DateTime 对象,请使用 DateTime.ToBinary。这将为您提供一个唯一的 64 位整数,可用于重构 DateTime(使用 DateTime.FromBinary)。

关于c# - DateTime.Now 是否有自己的 GetHashCode 实现来提供唯一的哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1989262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com