一个使用枚举的例子:
/// <summary>
/// 枚举类型可以使用Flags位域标志,表示这些枚举类型可以作为位域(即一组标志)处理。
/// C#位域主要用于.Net里面对于某一个事物有多种混合状态时使用,为了更好的实现混合状态,我们可以在枚举中加入位域标签。
/// </summary>
[Flags]
public enum StudyTime
{
//定义枚举常量时使用2倍递增,这样可以使组合的枚举常量中的各个标志都不重叠。
星期一 = 1 << 0,
星期二 = 1 << 1,
星期三 = 1 << 2,
星期四 = 1 << 3,
星期五 = 1 << 4,
所有时间 = 星期一 | 星期二 | 星期三 | 星期四 | 星期五
}
public enum Course
{
计算机 = 1 << 0,
英语 = 1 << 1,
国学 = 1 << 2,
数学 = 1 << 3,
}
class Program
{
static void Main(string[] args)
{
//按位或"|"、按位与"&"、按位异或"^"、按位取反"~"。
Console.WriteLine(1 | 2);//将十进制转换为二进制,然后求并集。
Console.WriteLine(1 & 3);//将十进制转换为二进制,然后求交集。
Console.WriteLine(1 ^ 3);//将十进制转换为二进制,然后从并集中去除交集。
Console.WriteLine(~10);//(~0=-1,~1=-2,~2=-3,~-1=0,~-2=1,~-3=2)运算规则:加1后取负
Console.WriteLine("\t课程表");
Dictionary<Course, StudyTime> dictionary = new Dictionary<Course, StudyTime>();
StudyTime[] dateArr = new StudyTime[] { StudyTime.星期一, StudyTime.星期二, StudyTime.星期三, StudyTime.星期四, StudyTime.星期五 };
dictionary.Add(Course.计算机, StudyTime.所有时间);
dictionary.Add(Course.国学, StudyTime.星期一 | StudyTime.星期二);
dictionary.Add(Course.数学, StudyTime.星期三 | StudyTime.星期四);
dictionary.Add(Course.英语, StudyTime.星期三|StudyTime.星期四|StudyTime.星期五);
foreach (StudyTime date in dateArr)
{
Console.Write(date+":");
foreach (var item in dictionary)
{
if ((item.Value & date) > 0)
{
Console.Write(item.Key+" ");
}
}
Console.WriteLine();
}
StudyTime studyTime = StudyTime.星期一 | StudyTime.星期二|StudyTime.星期三;
Console.WriteLine("使用 | 符号(求并集): " + studyTime.ToString());
studyTime = (StudyTime.星期二 | StudyTime.星期三) & studyTime;
Console.WriteLine("使用 & 符号(求交集):" + studyTime.ToString());
studyTime = (StudyTime.星期二|StudyTime.星期三|StudyTime.星期五) ^ studyTime;
Console.WriteLine("使用 ^ 符号(从并集中去除交集):" + studyTime.ToString());
Console.WriteLine("使用&(~)从组合状态中去掉一个元素:"+(StudyTime.所有时间 & (~studyTime)).ToString());
studyTime = ~(StudyTime.星期一 | StudyTime.星期二);
Console.WriteLine("使用 ~ 符号(加1后取负):" + studyTime.ToString());
Console.ReadKey(true);
}
} |