如何从字符串表示创建枚举? C#

时间:2009-07-15 09:32:43

标签: c# asp.net user-controls enums

我试图从用户控件传回一个属于枚举的字符串列表,如下所示:

<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”?或者你知道在用户控件中使用枚举的更好方法吗?我真的希望能够传递一个整洁的列表

5 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分:4)

您需要查看System.Enum.Parse方法。

答案 2 :(得分:3)

Enum.Parse是解析字符串以获取枚举的规范方法:

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

但你需要自己进行字符串拆分。

但是,您的属性目前是MS[]类型 - setter中的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();
    }
}

我不知道你是否需要直接暴露数组本身 - 这取决于你想要做什么。

答案 3 :(得分: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());

(因为我误读了你的代码而更新了我的代码)

答案 4 :(得分:0)

使用[Flags]属性标记您的枚举,并组合标志而不是枚举值数组。