【发布时间】:2016-01-17 18:12:24
【问题描述】:
假设我有几个课程:
MyClass1() {}
MyChild1() : MyClass1 {}
MyChild2() : MyClass2 {}
MyGrandchild1() : MyChild2 {}
等等
我知道 GetHashCode() 本身,不保证任何两个不同的对象之间的唯一性,但我感兴趣的是它适用于任何两个 类型 也是?即:
(1)是否有机会:typeof(MyClass1).GetHashCode() == typeof(MyGrandchild1).GetHashCode() 将返回 true?
(2) 如果 (1) 有机会:typeof(MyClass1) == typeof(MyGrandchild1) 是否有机会返回true?
(3) 最坏的情况:typeof(int) == typeof(long) 是否有机会返回true?
编辑我忘记询问案例(4) typeof(int).GetHashCode() == typeof(long).GetHashCode(),是否有机会返回true?
【问题讨论】:
-
1.是的; 2.没有; 3.没有
-
GetHashCode()返回整数值。因此,可能的唯一值的数量有限。另一方面,您可以拥有的不同类型没有限制。所以答案是否定的,没有保证唯一性。不同类型的GetHashCode()可能相同 -
@Fabjan 如果它只是(1)我同意它是一个完整的副本,但因为(2)和(3)也是问题的一部分,听起来 OP 在那里感到困惑类型的平等和他们的不平等,这使得这个问题不同恕我直言。
-
@SergeyBerezovskiy 所以只有大约 32k 个可能的唯一值。
int不是 32 位类型吗?应该有 2^32 个可能的唯一值,而不仅仅是 32k(HashCode 允许为负数)。
标签: c# gethashcode gettype