2011-06-15 50 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。