2011-01-24 14 views
2

可能重複:
How do I Convert a string to an enum in C#?投String到enum標記在C#

如何轉換(到演員)的字符串(文本)是在C#枚舉變量值

+0

可能的重複[如何將字符串轉換爲C#中的枚舉?](http://stackoverflow.com/questions/16100/how-do-i-convert-a-string-to-an-enum -in-c)另請參閱:[Enum.Parse(),肯定是一個更好的方法?](http://stackoverflow.com/questions/2394725/enum-parse-surely-a-neater-way)。 –

回答

6

你可以這樣做:

MyEnum oMyEnum = (MyEnum) Enum.Parse(typeof(MyEnum), "stringValue"); 
2

使用Enum.Parse

(EnumType)Enum.Parse(typeof(EnumType), "EnumString"); 
1

或者在這樣的方法把它包裝:

T ParseEnum<T>(string stringValue) 
{ 
    return (T) Enum.Parse(typeof(T), stringValue); 
} 
2

我通常使用的通用枚舉類這個東西:

public static class Enum<T> 
{ 
    public static T Parse(string value) 
    { 
     return (T)Enum.Parse(typeof(T), value); 
    } 

    public static List<T> GetValues() 
    { 
     List<T> values = new List<T>(); 
     foreach (T value in Enum.GetValues(typeof(T))) 
      values.Add(value); 
     return values; 
    } 

    public static string GetName(object value) 
    { 
     return Enum.GetName(typeof(T), value); 
    } 

    // etc 
    // you also can add here TryParse 
} 

用法更簡單:

Enum<DayOfWeek>.Parse("Friday"); 
1

.NET提供的System.Enum類型的一些靜態方法來做到這一點,除了實際執行中投,有幾件事情需要考慮代碼:

  1. 你要知道其中包含枚舉類型您將施放的值。
  2. 謹慎考慮一下這樣一個事實,即您嘗試投射的字符串值可能未在您的目標枚舉類型上定義。

所以,如果你有一個枚舉:

public enum TestEnum 
    { 
     FirstValue, 
     SecondValue 
    } 

然後由System.Enum類提供了以下2種靜態方法將字符串值轉換爲一個枚舉類型:

枚舉。 IsDefined(.NET 1.1 - 4 +的Silverlight)(使用)

TestEnum testEnum; 
    if(Enum.IsDefined(typeof(TestEnum), "FirstValue")) 
    { 
     testEnum = (TestEnum)Enum.Parse(typeof(TestEnum), "FirstValue"); 
    } 

Enum.TryParse(.NET 4 + Silverlight中)(使用)

TestEnum testEnum; 
    bool success = Enum.TryParse("FirstValue", out testEnum); 

或者,如果您不需要執行任何安全檢查,則會提供Enum.Parse方法(如其他人所述)。然而,如果你試圖做這樣的事情在我們的例子中,

Enum.Parse(TestEnum, "ThisValueDoesNotExist") 

那麼.NET將拋出你必須處理System.ArgumentException。總之,儘管你所要求的語法很簡單,但我建議考慮確保無錯代碼,尤其是在解析從用戶輸入中獲取的字符串時,有一些預防措施。如果字符串來自設置文件或其他類型的值,您可以確定它是在您的枚舉類型中定義的,那麼可以跳過我在回答中列出的一些額外步驟。

我希望這有助於!

5

雖然所有的Enum.Parse人都是正確的,但現在有Enum.TryParse

這大大改善了事情。