我已经创建了一个对象,详细说明。 然后我分配:int x = details.GetHashCode();
稍后在程序中,我想使用整数x访问此对象。有没有办法在C#中做到这一点?
非常感谢
保
答案 0 :(得分:7)
没有
你可以创建(比方说)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会更难......但除非你实现自己的集合或相等运算符,否则该函数不是很多用。