2013-09-27 192 views
2

我宣佈這樣的public enum解析枚舉不工作

public enum States 
    { 
     SomeState, 
     SomeOtherState 
    } 

具有任意的字符串myString其可以代表任何上述的「國家」,我想寫一個開關檢查它目前是哪一個。

這是我的嘗試。

States state = Enum.Parse(States, myString, true); 
      switch (state) 
      { 
       case States.SomeState: 
       case States.SomeOtherState: 
        break; 
       default: 
        break; 
      } 

裏面Enum.Parse()的它告訴我,論證國家被用作一個類型,而不是作爲一個變量。這不正確的用法嗎? Enum.Parse應該接收的第一個參數是Type enumType:爲什麼然後它告訴我它需要一個變量?


多種回覆表示使用typeof。不幸的是,我已經嘗試過,但因爲我收到以下錯誤,我猜想這是一個錯誤的想法。

Enum.Parse(typeof(States), myString, true); 

產量:

不能隱式轉換類型 '對象' 到 '國家'。存在明確的轉換 。

回答

5

是的,你需要在枚舉的,你被解析成(使用typeof)的類型來發送:

States state = (States)Enum.Parse(typeof(States), myString, true); 

Parse方法需要System.Type類型的參數。不是類型States

這是docs的簽名。

[ComVisibleAttribute(true)] 
public static Object Parse(
    Type enumType, 
    string value, 
    bool ignoreCase 
) 

Parse返回object所以它需要你投你的類型解析之後。

+0

感謝您的答覆。這也是我所做的......不幸的是,它不工作:請參閱最新的問題。 – Saturnix

+0

你也必須投下結果。更新。當然是 –

+0

!我真是一個白癡......非常感謝你的幫助! – Saturnix

0

既然它期待一個類型,改變Enum.Parse(States, myString, true);到Enum.Parse(typeof(States), myString, true);

0

這是正確的。

States state = Enum.Parse(typeof(States), myString, true); 
switch (state) 
{ 
    case States.SomeState: 
    case States.SomeOtherState: 
     break; 
    default: 
     break; 
} 
0
States tmp; 
Enum.TryParse<States>(myString,true ,out tmp);