使用哈希码引用对象?

时间:2011-05-24 10:41:15

标签: c# gethashcode

我已经创建了一个对象,详细说明。 然后我分配:int x = details.GetHashCode();

稍后在程序中,我想使用整数x访问此对象。有没有办法在C#中做到这一点?

非常感谢

7 个答案:

答案 0 :(得分:7)

没有

  • 它可能是垃圾收集,除非你有一些东西可以阻止它。
  • 哈希码不是唯一的 - 如果有两个具有相同哈希码的对象会怎么样? (有关详细信息,请参阅Eric Lippert's post about hash codes。)

可以创建(比方说)Dictionary<int, Details>并使用哈希码作为密钥 - 但我强烈建议您做这一点。

您是否不想仅保留对象的引用而不是哈希代码?

答案 1 :(得分:0)

没有

Hashcode表示对象上的一些散列函数值。

您无法从此重新创建原始对象的参考,更重要的是,无法保证对象仍然存在。

答案 2 :(得分:0)

如果有办法则会违反面向对象。您应该将详细信息引用公开给消费代码。

答案 3 :(得分:0)

是的,您可以使用Dictionary<int,Details>中的哈希码创建details.GetHashCode( )并将对象存储在此字典中,然后使用x将对象拉出字典。

但这不是我建议做的事情!你试图实现的是什么?

答案 4 :(得分:0)

存储整数,然后再次检查Hashcode。

请注意,在C#中,Hashcode不是唯一的保证。如果你正在处理几百万个对象,你可以很容易地使用默认实现运行重复哈希。

http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx

“GetHashCode方法的默认实现不保证不同对象的唯一返回值。”

答案 5 :(得分:0)

public static Detail GetDetailsFromHash(this List<Detail> detailsList, int x) {
    foreach (var details in detailslist) {
        if (details.GetHashCode() == x) {
            return details;
        }
    }
    return null;
}

但是,不保证Hashcodes是唯一的

答案 6 :(得分:0)

哈希码实际上不是直接使用的。其主要目的是使物品可以用作集合中的钥匙。然后,集合负责将散列映射回对象。基本上它可以让你做Dictonary<details, myClass2>这样的事情,如果没有实现GetHashCode会更难......但除非你实现自己的集合或相等运算符,否则该函数不是很多用。