2009-07-15 61 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]属性标记枚举,并结合标志而不是枚举值数组。