Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从字符串表示创建枚举?c#_C#_Asp.net_User Controls_Enums - Fatal编程技术网

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

如何从字符串表示创建枚举?c#,c#,asp.net,user-controls,enums,C#,Asp.net,User Controls,Enums,我试图从用户控件传回属于枚举的字符串列表,如下所示: <bni:products id="bnProducts" runat="server" ProductsList="First, Second, Third" /> public enum MS { First = 1, Second, Third }; private MS[] _ProductList; public MS[] Produc

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

<bni:products id="bnProducts" runat="server" ProductsList="First, Second, Third"  />
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;
        }
    }
我的问题是我不知道如何将该字符串转换为枚举列表,那么“如何将字符串转换为枚举列表”应该是什么呢?或者您知道在用户控件中使用枚举的更好方法吗?我真的希望能够传递一个整洁的列表,您需要查看该方法。

string[]stringValues=inputValue.Split(',');
_ProductList=新MS[stringValues.Length];
对于(int i=0;i

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

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

MS ms = (MS) Enum.Parse(typeof(MS), "First");
但是你需要自己做字符串拆分

但是,您的属性当前的类型为
MS[]
——setter中的
变量将不是字符串。我怀疑您需要将属性设置为字符串,并在那里进行解析,将结果存储在
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();
    }
}
我不知道您是否需要直接公开阵列本身-这取决于您尝试执行的操作。

这是一个简短的解决方案,但它没有涵盖一些非常重要的内容,如本地化和无效输入

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));
}

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

+1用于验证。从这个例子来看,本地化不是什么大问题,因为这不是用户提供的数据,而是在页面代码中。这一个“或”是传递的值,不是我要找的,你的确切意思是什么?当然,这个方法只是将一个值转换为一个枚举,您需要遍历所有值并对每个元素应用该方法;)这并不总是正确的。例如,HTTP响应代码不是逻辑标志,但您可能有它们的集合(例如,“我处理这些响应代码”)。不要急于对逻辑上不是标志的枚举使用标志。
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));
}