C#中枚举类型的理解和基本使用

76 篇文章 1 订阅

枚举类型的作用是限制其变量只能从有限的选项中取值,枚举成员对应于一个数字,默认值从0开始,并依次递增。

创建一个简单的枚举类型:

    public enum Months
    {
        January=1,
        February=2,
        March=3,
        April=4,
        May=5,
        June=6,
        July=7,
        August=8,
        September=9,
        October=10,
        November=11,
        December=12
    }

故意设置开始枚举值为1,但是默认的枚举值仍是0.

Console.WriteLine(default(Months)); 输出0 ,即使枚举没有值为 0 的成员,它的默认值永远都是 0

在C# 枚举成员的类型默认是 int 类型,通过继承可以声明枚举成员为其它类型,枚举类型一定是继承自 byte、sbyte、short、ushort、int、uint、long 和 ulong 中的一种,不能是其它类型。修改上枚举类型:

    public enum Months:byte
    {
        January=1,
        February=2,
        March=3,
        April=4,
        May=5,
        June=6,
        July=7,
        August=8,
        September=9,
        October=10,
        November=11,
        December=12
    }

枚举类型基本用法:

1.枚举成员转字符串

Console.WriteLine(Months.April.ToString());//"April"

Console.WriteLine(Months.April.ToString());//"April"

2.字符串转枚举成员变量

Enum.TryParse("May", out Months M); //Months.May

Months M2 = (Months)Enum.Parse(typeof(Months), "may", true);//Months.May

3. 枚举转数字

byte b = (byte)Months.December; //12

4. 数字转枚举

Months M3 = (Months)3; //Months.March

5.获取枚举所属的数字类型

 Type t = Enum.GetUnderlyingType(typeof(Months));//System.Byte

6.获取枚举的所有成员变量

var values = Enum.GetValues(typeof(Months));

7.获取所有枚举成员的字段名称

var names = Enum.GetNames(typeof(Months));

另外,值得注意的是,枚举可能会得到非预期的值(值没有对应的成员)。比如:

 Months m = (Months)20;
 Console.WriteLine(m.ToString());//20

枚举的 Flags 特性

    [Flags]
    public enum Months : byte

 var works = Months.March | Months.April;
 Console.WriteLine(works); //July 上述将3和4求和了,起始这不是我们的意图

重新定义枚举:

    [Flags]
    public enum Months 
    {
        January = 1<<0,   //0000 0001       1  
        February = 1 << 1,//0000 0010       2
        March = 1 << 2,   //0000 0100       4
        April = 1 << 3,   //0000 1000       8
        May = 1 << 4,     //0001 0000       10 
        June = 1 << 5,    //0010 0000       20
        July = 1 << 6,    //0100 0000       40
        August = 1 << 7,  //1000 0000       80
        September = 1 << 8,//0001 0000 0000       100
        October = 1 << 9,  //0010 0000 0000       200
        November = 1 << 10,//0100 0000 0000       400
        December = 1 << 11,//1000 0000 0000       800
    }
 

         var works = Months.March | Months.April;
         Console.WriteLine(works);//March, April  这样就是可以与或逻辑运算了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flysh05

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值