枚举关于Flags特性的使用
2017-11-01 21:37
369 查看
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _02EnumTest { [Flags]//特性,表示可以将枚举对象视为位标志 enum CardDeckSetting : uint { SingleDeck = 0x01, //位0:0000 0001 LargePrctures = 0x02, //位1:0000 0010 FancyNumbers = 0x04, //位2:0000 0100 Animation = 0x08 //位3:0000 1000 } class EnumSource { bool UseSingleDeck = false, UseBigPics = false, UseFancyNumbers = false, UseAnimation = false, UseAnimationAndFancyNumbers = false; //判断当前位是否包含在位集合中 public void SetOptions(CardDeckSetting ops) { UseSingleDeck = ops.HasFlag(CardDeckSetting.SingleDeck); UseBigPics = ops.HasFlag(CardDeckSetting.LargePrctures); UseFancyNumbers = ops.HasFlag(CardDeckSetting.FancyNumbers); UseAnimationAndFancyNumbers = ops.HasFlag((CardDeckSetting.Animation | CardDeckSetting.FancyNumbers)); } //使用FIags特性,可以把一个枚举标志字全部遍历出来 public void ShowCDSCollection() { CardDeckSetting ops = CardDeckSetting.Animation | CardDeckSetting.FancyNumbers | CardDeckSetting.LargePrctures; Console.WriteLine(ops.ToString()); } //字符串转为枚举值 public CardDeckSetting StringToEnum(string stringVal) => (CardDeckSetting)Enum.Parse(typeof(CardDeckSetting), stringVal); //索引器 public bool this[int index] { set { if (index<4) { switch (index) { case 0: UseSingleDeck = value; break; case 1: UseBigPics = value; break; case 2: UseFancyNumbers = value; break; case 3: UseAnimation = value; break; } } else { Console.WriteLine("超出索引范围(0-3)"); } } get { if (index < 4) { switch (index) { case 0: return UseSingleDeck; case 1: return UseBigPics; case 2: return UseFancyNumbers; case 3: return UseAnimation; default: return false; } } else { Console.WriteLine("超出索引范围(0-3)"); return false; } } } //使用Enum的GetNames枚举进行迭代输出 public void ShowEnumAll() { foreach (var item in Enum.GetNames(typeof(CardDeckSetting))) { Console.WriteLine(item); } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _02EnumTest { class Program { static void Main(string[] args) { CardDeckSetting ops = CardDeckSetting.Animation | CardDeckSetting.FancyNumbers | CardDeckSetting.SingleDeck; EnumSource es = new EnumSource(); Console.WriteLine("==========位标志判断==========="); es.SetOptions(ops); for (int i = 0; i < 4; i++) { Console.WriteLine(es[i]);//使用索引器 } Console.WriteLine(); Console.WriteLine("=========字符串转换位枚举============"); Console.WriteLine(es.StringToEnum("SingleDeck")); Console.WriteLine(); Console.WriteLine("=========使用Enum.GetNames()遍历所有的枚举对象============"); es.ShowEnumAll(); Console.ReadKey(); } } }
相关文章推荐
- C#枚举中使用Flags特性
- C#枚举中使用Flags特性
- C#枚举中使用Flags特性
- C#枚举中使用Flags特性
- C#枚举中使用Flags特性
- 关于IOS的Autolayout特性的理解以及使用
- C#特性学习与使用(为枚举定义Description)
- iOS 关于枚举的使用
- 黑马程序员_eclipse的使用和java1.5新特性以及枚举
- 关于枚举的使用
- 按位枚举(flags)的使用
- .NET(C#):使用反射来获取枚举的名称、值和特性【转】
- 3.关于枚举类型使用默认值的问题
- 枚举类型特别实用的特性(在switch语句内使用)
- iOS 关于枚举的使用
- .NET中Flags枚举的使用
- 关于使用 EnumWindows 枚举应用程序窗口的技巧(转)
- 艾伟:.NET中Flags枚举的使用
- .NET中Flags枚举的使用
- .NET中Flags枚举的使用