通用枚举标志解析器

时间:2013-08-30 20:50:25

标签: c# .net generics enums enum-flags

我有一个字符串值数组,我想在Flags Enum对象上设置标志。我有几个这样的,并且正在寻找一种更通用的方式来传递Flags枚举的类型,而不必为每个Flags Enum类型复制方法。这就是我目前所拥有的:

    public static MyFlagsEnum ParseFlagsEnum(string[] values)
    {
        MyFlagsEnum flags = new MyFlagsEnum();
        foreach (var flag in values)
        {
            flags |= (MyFlagsEnum)Enum.Parse(typeof(MyFlagsEnum), flag);
        }

        return flags;
    }

我正在寻找一种更通用的方法来做同样的事情,同时能够使用任何Flags Enum类型。

1 个答案:

答案 0 :(得分:7)

Enum.Parse已经可以组合多个标志。引自文档:

  

<强>说明

     

value参数包含枚举成员的基础值或命名常量的字符串表示形式,或由逗号(,)分隔的命名常量列表。一个或多个空格可以在值中的每个值,名称或逗号之前或之后。如果value是一个列表,则返回值是指定名称的值与按位OR运算相结合。

所以你可以这样做:

public static T ParseFlagsEnum<T>(string[] values)
{
  return (T)Enum.Parse(typeof(T), string.Join(",", values));
}