枚举基本概念
- 枚举和结构体一样都是值类型
- 枚举只有一种类型成员变量:命名的整数值常量(默认为int类型)
- 每个枚举成员都被赋予成一个底层类型的值常量
- 默认情况下,第一个成员赋值为0,往后的成员值依次+1(初始化过程中,下一个值未赋值,默认情况它的值为上一个值加1)
- 不同成员值可以相同
默认情况下,第一个成员赋值为0,往后的成员值依次+1(初始化过程中,下一个值未赋值,默认情况它的值为上一个值加1)
enum Show:int
{
a,
b,
c = 10,
d,
e = a
}
class Program
{
static void Main(string[] args)
{
Show s1 = Show.a;
Show s2 = Show.b;
Show s3 = Show.c;
Show s4 = Show.d;
Show s5 = Show.e;
Console.WriteLine("{0},\t{1}", s1, (int)s1);
Console.WriteLine("{0},\t{1}", s2, (int)s2);
Console.WriteLine("{0},\t{1}", s3, (int)s3);
Console.WriteLine("{0},\t{1}", s4, (int)s4);
Console.WriteLine("{0},\t{1}", s5, (int)s5);
Console.ReadKey();
}
}
运行结果:
a, 0
b, 1
c, 10
d, 11
a, 0
标志
- 如果在 flag 中设置的位域也在当前实例中进行了设置,则为 true;否则为 false。
有兴趣的话,直接看代码吧。
enum CardDeckSettings : uint
{
SingleDeck = 0x01, //位0
LargePictures = 0x02, //位1
FancyNumbers = 0x04, //位2
Animation = 0x08 //位3
}
class MyClass
{
bool UseSingleDeck= false,
UseBigPics= false,
UseFancyNumbers= false,
UseAnimation= false,
UseAnimationAndFancyNumbers = false;
public void SetOptions(CardDeckSettings ops)
{
UseSingleDeck = ops.HasFlag(CardDeckSettings.SingleDeck);
UseBigPics = ops.HasFlag(CardDeckSettings.LargePictures);
UseFancyNumbers = ops.HasFlag(CardDeckSettings.FancyNumbers);
UseAnimation = ops.HasFlag(CardDeckSettings.Animation);
CardDeckSettings testFlags = CardDeckSettings.Animation | CardDeckSettings.FancyNumbers;
UseAnimationAndFancyNumbers = ops.HasFlag(testFlags);
}
public void PrintOptions() {
Console.WriteLine("Option settings:");
Console.WriteLine("Use Single Deck - {0}", UseSingleDeck );
Console.WriteLine("Use Large Picture - {0}", UseBigPics );
Console.WriteLine("Use Fancy Number - {0}", UseFancyNumbers ) ;
Console.WriteLine("Show Animation - {0}", UseAnimation );
Console.WriteLine("Show Animation and FancyNumbers - {0}",UseAnimationAndFancyNumbers);
}
}
class Program
{
static void Main(string[] args)
{
CardDeckSettings ops;
ops = CardDeckSettings.FancyNumbers;
Console.WriteLine(ops.ToString()+" 值:{0}",(int)ops);
ops = CardDeckSettings.FancyNumbers | CardDeckSettings.SingleDeck;//逻辑运算
Console.WriteLine(ops.ToString()+"\n");
MyClass myClass = new MyClass();
myClass.SetOptions(ops);
myClass.PrintOptions();
Console.ReadKey();
}
}
运行结果:
FancyNumbers 值:4
5
Option settings:
Use Single Deck - True
Use Large Picture - False
Use Fancy Number - True
Show Animation - False
Show Animation and FancyNumbers - False