枚举分为一般枚举和标志枚举两类。
新建控制台应用程序,源码如下
示例1:一般枚举
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _03枚举
{
class Program
{
static void Main(string[] args)
{
//1.普通枚举中每个值都是互斥的。
//2.枚举中的每个值都有一个对应数值来表示。
//2.1默认数值是整型int,从0开始,依次递增。
//2.2可以手动设置每个枚举对应的整数。
//3.枚举在编译完成后就已经用对应的数值常量来表示了。
Console.WriteLine((int)UserState.QMe);
Console.WriteLine((int)UserState.OnLine);
Console.WriteLine((int)UserState.OffLine);
Console.WriteLine((int)UserState.Busy);
Console.WriteLine((int)UserState.Hide);
Console.WriteLine((int)UserState.Left);
//1>将枚举转换为数值:(int)MyColor.Red;
//2>将枚举转换为字符串:MyColor.Red.ToString()
//3>将字符串转换为枚举:MyColor mc = (MyColor)Enum.Parse(typeof(MyColor), "Red");
//A.把枚举转换为字符串
string str = UserState.Busy.ToString();
Console.WriteLine("A.把枚举转换为字符串:"+str);
//B.把字符串转换为枚举类型
string meiJu = "QMe";
//强制类型转换
UserState state = (UserState)Enum.Parse(typeof(UserState), meiJu);
Console.WriteLine("B.把字符串转换为枚举类型:"+(int)state);
Console.ReadKey();
}
}
/// <summary>
/// 定义QQ状态枚举类型
/// </summary>
/// 默认枚举值都是用int替代的,但是也可以指定具体数据类型
/// 如:byte(0-255)表示,限制类枚举中的数据类型
/// 枚举基础类型可以是除了char以外的任何整型,准许使用的枚举类型有 byte、sbyte、short、ushort、int、uint、long 或 ulong。
public enum UserState
{
//一般枚举中的每个值都是互斥的
QMe,
OnLine = 100,
OffLine,
Busy,
Hide = 250,
Left
}
}
输出结果:
示例2:标志枚举
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace _04标志枚举
{
class Program
{
static void Main(string[] args)
{
FileInfo info = new FileInfo(@"F:\暑假任务\23种C#设计模式.pdf");
Console.WriteLine(info.Attributes);
//代码修改属性,采用逻辑运算或(|)进行判断
//00001 状态1
//00010 状态2
//00011 结果
//info.Attributes = FileAttributes.ReadOnly | FileAttributes.Hidden | FileAttributes.Archive | FileAttributes.Compressed;
//info.Attributes = FileAttributes.ReadOnly | FileAttributes.Hidden;
//定义一个“高富帅”
GoodPeople lyh = GoodPeople.高 | GoodPeople.富 | GoodPeople.帅;
//GoodPeople hh = GoodPeople.优秀男;
//当前二进制:00111
//验证lyh的枚举中是否具有“帅”,这一项。采用“&逻辑与”运算符
//00100 状态1
//00111 状态2
//00100 结果
if ((lyh & GoodPeople.帅) == GoodPeople.帅)
{
Console.WriteLine("这小伙很帅~~~");
}
else
{
Console.WriteLine("一点都不帅。。。。");
}
//=================判断一个文件是否隐藏=================
FileInfo info1 = new FileInfo(@"F:\暑假任务\23种C#设计模式.pdf");
if ((info1.Attributes& FileAttributes.Hidden)== FileAttributes.Hidden)
{
Console.WriteLine("文件时隐藏的!");
}
else
{
Console.WriteLine("不隐藏!!!");
}
Console.ReadKey();
}
}
[Flags] //标志枚举,加上这个特性后枚举类型.ToString(),返回的就是文字形式,不是数字了
public enum GoodPeople
{
高=1,//00001
富=2,//00010
帅=4,//00100
白=8,//01000
美=16,//10000
优秀男 = GoodPeople.高 | GoodPeople.富 | GoodPeople.帅,
优秀女 = GoodPeople.白 | GoodPeople.富 | GoodPeople.美
}
输出结果如下: