【发布时间】:2014-04-24 08:38:23
【问题描述】:
我需要为对象构建一个稳定的(= 不随时间变化)哈希码。 具体来说,我不知道对象的确切类型。我做的唯一假设是它继承自 IStructuralEquatable。
所以我需要一个方法:
static string GetStableHashcode <T> (T object) where T: IStructuralEquatable
.Net 框架提供这种功能? 否则,使用哪种算法?
【问题讨论】:
-
你的问题让我有些困惑。通常哈希码不会随时间变化,它们是整数,而不是字符串。您的泛型方法有一个类型参数
T,但该类型不是函数签名的一部分,那么T应该如何在函数中使用?无论如何,您可以使用 .NET 元组或匿名类型通过组合值来创建哈希码,但我不确定这是否能回答您的问题。 -
是的,该函数可以返回一个整数(所以如果我需要一个字符串,我只需要序列化它)。
Object.GetHashCode(在 Tuple 或任何其他 .Net 类上)不稳定。 2 个执行实例(所以 2 个 AppDomain)将为同一个对象生成 2 个不同的哈希码!?!
标签: .net hashcode structural-equality