2009-07-15 66 views
0

我嘗試通過從用戶反饋控制是一個枚舉的一部分字符串列表,像這樣:如何從字符串表示中創建枚舉? C#

<bni:products id="bnProducts" runat="server" ProductsList="First, Second, Third" /> 

,並在代碼behid做這樣的事情:

public enum MS 
    { 
     First = 1, 
     Second, 
     Third 
    }; 
    private MS[] _ProductList; 
    public MS[] ProductsList 
    { 
     get 
     { 
      return _ProductList; 
     } 
     set 
     { 
      _ProductList = how_to_turn_string_to_enum_list; 
     } 
    } 

我的問題是我不知道如何將該字符串轉換爲枚舉列表,那麼應該是「how_to_turn_string_to_enum_list」?或者你知道在用戶控件中使用枚舉的更好方法嗎?我真的希望能夠通過一個整潔的清單

回答

3

Enum.Parse是解析字符串得到一個枚舉的正規途徑:

MS ms = (MS) Enum.Parse(typeof(MS), "First"); 

但你需要做的字符串分裂你自己。

但是,您的財產目前的類型爲MS[] - 設置者中的value變量不會是字符串。我懷疑你需要使你的財產成爲一個字符串,並解析它,將結果存儲在MS[]。例如:

private MS[] products; 

public string ProductsList 
{ 
    get 
    { 
     return string.Join(", ", Array.ConvertAll(products, x => x.ToString())); 
    } 
    set 
    { 
     string[] names = value.Split(','); 
     products = names.Select(name => (MS) Enum.Parse(typeof(MS), name.Trim())) 
         .ToArray(); 
    } 
} 

我不知道您是否需要直接暴露數組本身 - 這取決於您想要做什麼。

+0

eh,如果我沒有弄錯,Enum.Parse需要一個類型? MS(MS)Enum.Parse(typeof(MS),「First」); – 2009-07-15 09:44:17

+0

哎呀,謝謝:) – 2009-07-15 10:06:44

4

你需要看看System.Enum.Parse方法。

+0

這一個「或」的價值通過,而不是我在找什麼 – Ayyash 2009-07-15 09:57:56

+0

你是什麼意思?當然,這種方法只是將一個單一的值轉換爲一個枚舉,你需要遍歷所有的元素並在每個元素上應用該方法;) – 2009-07-15 10:29:58

2
string[] stringValues = inputValue.Split(','); 

_ProductList = new MS[stringValues.Length]; 

for (int i=0;i< stringValues.Length;i++) 
    _ProductList[i] = (MS) Enum.Parse(typeof(MS), stringValues[i].Trim()); 

(更新了我的代碼,因爲我誤解你的代碼)

6

這是一個解決方案,但它不包括一些非常重要的東西,如本地化和無效輸入。

private static MS[] ConvertStringToEnumArray(string text) 
{ 
    string[] values = text.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries); 
    return Array.ConvertAll(values, value => (MS)Enum.Parse(typeof(MS), value)); 
} 
0

用[Flags]屬性標記枚舉,並結合標誌而不是枚舉值數組。