2011-07-19 63 views
40

我遇到了使用Enum.TryParse時並不期待的行爲。Enum.TryParse對任何數值都返回true

如果我有一個枚舉:

public enum MyEnum 
{ 
    ValueA, 
    ValueB, 
    ValueC 
} 

然後我通過一個數值(字符串)到Enum.TryParse,如:

MyEnum outputEnum; 
bool result = Enum.TryParse("1234", out outputEnum); 

儘管字符串 「1234」 不是一個可能的值,結果將返回爲true,並且我的outputEnum將具有值1234.

有沒有辦法可以避免這種行爲?我試圖編寫一個函數,它將處理任意字符串輸入爲一個枚舉,並且在我的錯誤輸入檢測中拋出了一個monkeywrench。

+0

http://stackoverflow.com/questions/4728295/why-enums-require-an-explicit-cast-to-int-type –

回答

60

此行爲是設計使然。

documentation說:

。如果value是不表示TEnum枚舉的基礎值的整數的字符串表示形式,則該方法返回一個枚舉成員,其基礎值將其值轉換爲整數類型。如果此行爲不受歡迎,請調用IsDefined方法以確保整數的特定字符串表示形式實際上是TEnum的成員。

請致電Enum.IsDefined以明確您解析的值實際上存在於此特定enum中。

如果你正在處理[Flags]枚舉(位掩碼),它會變得更加複雜。