分解一个枚举类型变量包含的多个枚举值

目标:分解一个枚举类型变量包含的多个枚举值

如:

Langs langJava = Langs.Csharp | Langs.Python;

解决办法:

关键点在于枚举定义时需加[System.Flags]特性标记

枚举定义:

[System.Flags]
enum Langs { Csharp = 1, Java = 2, Python = 4, Lisp = 16 };

分解函数:

        /// 
        /// 分解枚举类型值,允许一个枚举实例被辅多个值,该枚举类型必须[System.Flags]标记
        /// 
        /// 枚举
        /// 包含的多个枚举值集合
        public IEnumerable GetValueFromEnumInstance(Enum item)
        {
            Dictionary values = new Dictionary();
            foreach (Enum value in Enum.GetValues(item.GetType()))
            {
                values.Add(value.ToString(), value);
            }

            List itemNames = item.ToString().Split(',').ToList();
            List result = new List();

            foreach (var enumItem in values)
            {
                string itemName = itemNames.FirstOrDefault(x => x.Trim().Equals(enumItem.Key.Trim()));
                if (!string.IsNullOrEmpty(itemName))
                {
                    result.Add(enumItem.Value);
                    itemNames.Remove(itemName);
                }
            }
            return result.Distinct();
        }

调用例子:

            Langs langJava = Langs.Csharp | Langs.Python;
            
            Console.WriteLine(string.Format("first:{0}",langJava));
            foreach (var name in GetValueFromEnumInstance(langJava))
                Console.WriteLine("name : " + name);



你可能感兴趣的:(WinForm)