从组合枚举值中获取所有枚举常量的更好方法

时间:2013-11-21 09:18:30

标签: c# enums

我正在尝试从Type枚举变量中获取所有枚举值:

[Flags]
    enum Type
    {
        XML = 1,
        HTML = 2,
        JSON = 4,
        CVS = 8
    }


static void Main(string[] args)
{

    Type type = Type.JSON | Type.XML;

    List<Type> types = new List<Type>();

    foreach (string elem in type.ToString().Split(',') )
        types.Add(  (Type)Enum.Parse( typeof(Type), elem.Trim() ) );          

}

有更好的方法吗?

2 个答案:

答案 0 :(得分:6)

List<Type> types = Enum
                     .GetValues(typeof(Type))
                     .Cast<Type>()
                     .Where(val => (val & type) == val)
                     .ToList();

获得理想结果的另一种方式。

答案 1 :(得分:-1)

首先尝试在命名enum时使用'Type'这个词。使用EnumType或其他东西使用Enum.GetValues..something like this

public static List<EnumType> GetValues(Type enumType)
    {
        List<EnumType > enums = new List<EnumType >();
        if (!enumType.IsEnum) throw new ArgumentException(Enum type not found");

        foreach (EnumType value in Enum.GetValues(enumType))
            enums.Add(value);

        return enums;
    }