可能重複:
Using GetHashCode for getting Enum int value的hashCode作爲枚舉值
是可以安全使用GetHasCode得到類似下面的代碼枚舉值:
myList.SelectedIndex = myEnumValue.GetHashCode()
可能重複:
Using GetHashCode for getting Enum int value的hashCode作爲枚舉值
是可以安全使用GetHasCode得到類似下面的代碼枚舉值:
myList.SelectedIndex = myEnumValue.GetHashCode()
號結果不保證是唯一的或等價於該枚舉值的整數值。
我認爲它目前的實現與int轉換爲相同。但這是一個實現細節,可能會隨時更改。
正確的方法是投底層整數類型:
myList.SelectedIndex = (int)myEnumValue;
在一般情況下,沒有。 GetHashCode返回枚舉的基礎值,很可能是因爲枚舉只是整數下的整數。但是,這是一個實現細節,可能會在更高版本的框架中發生變化。
除此之外,請記住,枚舉不需要從0開始,也不需要爲每個值增加一個 - 換句話說,有很多方法可以讓你陷入困境該代碼。
得到一個枚舉值的潛在價值的正確方法是將它轉換:
int underlyingValue = (int)enumValue;
只要記住,它仍然是不正常使用該數值爲您的SelectedIndex,除非你明確知道正在使用的枚舉從0開始並增加1。
安全意義何在?有*不能保證值是唯一的......畢竟,你可以有一個基礎類型爲「long」的枚舉,其值超過2^32。 – 2011-06-15 20:46:18
看起來既不安全也不明智。考慮'(int)myEnumValue' – 2011-06-15 20:46:59
除非我誤解你:不,它不安全。散列碼應該在整個int值範圍內提供確定性但不可預知的值,所以你的代碼看起來很奇怪。你想達到什麼目的? – faester 2011-06-15 20:47:56