C#中的标志枚举
标志枚举在声明枚举前加[flag]
枚举值一般用2的N次方(1 2 4 8......) 不能(1 2 3)因为标志每组可以自由组合 1+2=3 就冲突了
下面将其十进制转化成为二进制说明就可以明白点
00001→1 00010→2 00100→4 01000→8 10000→16 -------------------- 高富帅白 00001 00010 00100 01000 ------- 01111→15 高富帅白 -------------------- 01111 高富帅白 用对象集合与上白若结果为白表示真,则要判断的项在集合中 01000 白 ------- 01000→8 白
namespace _02标志枚举 { class Program { static void Main(string[] args) { FileInfo info = new FileInfo(@"D:\a.txt"); Console.WriteLine(info.Attributes); //验证一个文件是否隐藏 if ((info.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { Console.WriteLine("文件隐藏!!"); } else { Console.WriteLine("文件没有隐藏张Z!!!"); } //设置文件的特性。只读,隐藏了 info.Attributes = FileAttributes.ReadOnly | FileAttributes.Hidden | FileAttributes.Archive; Console.WriteLine(info.Attributes); //验证一个文件是否隐藏 if ((info.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { Console.WriteLine("文件隐藏!!"); } else { Console.WriteLine("文件没有隐藏张Z!!!"); } GoodPeople people = GoodPeople.帅 | GoodPeople.富 | GoodPeople.高 | GoodPeople.白; Console.WriteLine(people); //为标志枚举赋值 //验证枚举people中是否有白这一项 if ((people & GoodPeople.白) == GoodPeople.白) { Console.WriteLine("很白!!"); } else { Console.WriteLine("不白!!!!"); } Console.ReadKey(); } } [Flags]//表示标志枚举 ,标志枚举的特性,加上这特性 枚举类型.tostring(),返回的就是文字了,不是数字 public enum GoodPeople { //标志枚举是需要设置固定的值的,要是不设置值得话,两个项的或运算就会混乱 //值必须是2的次方 //普通枚举是互斥的,但对于标志枚举是可以组合的, 高 = 1, 富 = 2, 帅 = 4, 白 = 8, 美 = 16 } }