我已经创建了一个对象,请说详细信息。然后我分配: int x = details.GetHashCode();
在程序的后面,我想使用整数 x 访问这个对象。有没有办法在 C# 中做到这一点?
非常感谢
保罗
我已经创建了一个对象,请说详细信息。然后我分配: int x = details.GetHashCode();
在程序的后面,我想使用整数 x 访问这个对象。有没有办法在 C# 中做到这一点?
非常感谢
保罗
不:
您可以创建(比如说) aDictionary<int, Details>
并使用哈希码作为键 - 但我强烈建议您不要这样做。
您有什么理由不想只保留对对象的引用而不是哈希码?
不。
Hashcode 表示对象上的某个散列函数的值。
您无法从中重新创建原始对象的引用,更重要的是,不能保证该对象仍然存在。
如果有一种方法,它将违背面向对象。您应该将详细信息引用公开给使用代码。
是的,您可以使用哈希码创建一个Dictionary<int,Details>
并将对象存储在此字典中details.GetHashCode( )
,然后使用x
.
但这不是我建议做的事情!你想达到什么目的?
存储整数并再次检查哈希码。
请注意,在 C# 中,Hashcode 并不保证是唯一的。如果您正在处理几百万个对象,您可以并且将使用默认实现非常容易地运行重复哈希。
http://msdn.microsoft.com/en-us/library/system.object.getashcode.aspx
“GetHashCode 方法的默认实现不保证不同对象的唯一返回值。”
public static Detail GetDetailsFromHash(this List<Detail> detailsList, int x) {
foreach (var details in detailslist) {
if (details.GetHashCode() == x) {
return details;
}
}
return null;
}
但是不保证哈希码是唯一的
哈希码并不是真的要直接使用。它的主要目的是使该项目可以用作集合中的键。然后集合负责将哈希映射回对象。基本上它可以让你做一些Dictonary<details, myClass2>
如果没有实现 GetHashCode 会更难的事情......但是除非你实现自己的集合或相等运算符,否则该函数并没有太多用处。