2011-07-21 169 views
2

這是一個奇怪的位。請原諒下面的半僞碼。我有一個枚舉值列表。比方說,例如,像這樣:從字符串獲取枚舉字段

public enum Types 
    { 
     foo = 1, 
     bar = 2, 
     baz = 3 
    } 

這將成爲,恭敬,在代碼:

Types.foo 
Types.bar 
Types.baz 

現在我有一個下拉列表,其中包含以下列表項:

var li1 = new ListItem() { Key = "foo" Value = "Actual Representation of Foo" } 
var li2 = new ListItem() { Key = "bar" Value = "Actual Representation of Bar" } 
var li3 = new ListItem() { Key = "baz" Value = "Actual Representation of Baz" } 

爲完整起見:

dropDownListId.Items.Add(li1); dropDownListId.Items.Add(li2); dropDownListId.Items.Add(li3); 

希望大家仍然和我在一起。我想要做的就是在Autopostback上取出字符串「foo」並將其轉換爲Types.foo - 而不使用開關(因爲枚舉值是從數據庫生成的,可能會更改)。

我希望有道理嗎?任何想法從哪裏開始?

回答

6

肯定的:

Types t; 
if(Enum.TryParse(yourString, out t)) // yourString is "foo", for example 
{ 
    // use t 
} 
else 
{ 
    // yourString does not contain a valid Types value 
} 

還有,需要一個布爾值,它允許您指定的情況下不敏感的過載: http://msdn.microsoft.com/en-us/library/dd991317.aspx

Enum.TryParse是在.NET 4的新如果你被困在一個以前的版本,您將不得不使用非類型安全的方法(在轉換失敗的情況下拋出異常,而不是返回false),如下所示:

try 
{ 
    Types t = (Types)Enum.Parse(typeof(Types), yourString); 
    // use t 
} 
catch(ArgumentException) 
{ 
    // yourString does not contain a valid Types value 
} 

Enum.Parse對於大小寫不敏感也有重載。

+0

中邦,作品一種享受,謝謝:) –

+0

@大衛沒問題,不要忘了接受回答! –

0

所以,你想:Enum.Parse(typeof(Types), postbackValue)

還是我錯過了什麼?