2011-06-15 51 views
0

可能重复:
Using GetHashCode for getting Enum int value的hashCode作为枚举值

是可以安全使用GetHasCode得到类似下面的代码枚举值:

myList.SelectedIndex = myEnumValue.GetHashCode() 
+2

安全意义何在?有*不能保证值是唯一的......毕竟,你可以有一个基础类型为“long”的枚举,其值超过2^32。 – 2011-06-15 20:46:18

+1

看起来既不安全也不明智。考虑'(int)myEnumValue' – 2011-06-15 20:46:59

+1

除非我误解你:不,它不安全。散列码应该在整个int值范围内提供确定性但不可预知的值,所以你的代码看起来很奇怪。你想达到什么目的? – faester 2011-06-15 20:47:56

回答

1

号结果不保证是唯一的或等价于该枚举值的整数值。

我认为它目前的实现与int转换为相同。但这是一个实现细节,可能会随时更改。

正确的方法是投底层整数类型:

myList.SelectedIndex = (int)myEnumValue; 
1

在一般情况下,没有。 GetHashCode返回枚举的基础值,很可能是因为枚举只是整数下的整数。但是,这是一个实现细节,可能会在更高版本的框架中发生变化。

除此之外,请记住,枚举不需要从0开始,也不需要为每个值增加一个 - 换句话说,有很多方法可以让你陷入困境该代码。

得到一个枚举值的潜在价值的正确方法是将它转换:

int underlyingValue = (int)enumValue; 

只要记住,它仍然是不正常使用该数值为您的SelectedIndex,除非你明确知道正在使用的枚举从0开始并增加1。