C# Enum注意事项

Enum关键字用于声明枚举,即一种由一组称为枚举数列表的命名常数组成的独特类型。每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。枚举元素的默认基础类型为 int。默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。

1.Enum可以使用基类选项来声明成员类型 ,注意,即使枚举的基础类型是 long,枚举成员仍然必须使用强制转换显式转换为 long 类型。

        enum Range : long { Max = 2147483648L, Min = 255L };
        long x =(long) Range.Max;
        long y = (long)Range.Min;

2.位域支持的运算符

(1)|,enum值的二进制数或运算

(2)&,enum值的二进制与运算

(3)^,enum值的二进制异或运算

当enum所有项的二进制与运算值为0时

“|”:表示两边求并集(元素相加,相同元素只出现一次)

“&”:表示两边是否其中一个是另外一个的子集,如果是返回子集,否则返回0(如果其中一个包含另外一个,返回被包含的,否则返回0)

“^”:表示从两者的并集中去除两者的交集(把两个的元素合并到一起,如果两个中有公共元素,要将这个公共元素从合并的结果中去除)

当进行位域运算,用flags声明了一个位域,与枚举不同,位域支持不同的&和|操作。对于普通枚举,|和&操作代表二进制比特操作
    [Flags]
    public enum Seasons
    {   
        //定义一个枚举类型  
        春天 = 1,
        夏天 = 2,
        秋天 = 4,
        冬天 = 8         
    }  
    class Program
    {
        static void Main(string[] args)
        {
            //两边求并集
            Seasons season = Seasons.春天 | Seasons.夏天;
            Console.WriteLine(season);         
            //求子集
            season = (Seasons.春天 | Seasons.夏天 | Seasons.秋天) & (Seasons.春天 | Seasons.夏天);
            Console.WriteLine(season);          
            //并集中去除两者的交集
            season = (Seasons.春天 | Seasons.夏天 | Seasons.秋天) ^ (Seasons.春天 | Seasons.夏天);
            Console.WriteLine(season);
            Console.Read();
        }
    }
输出的结果为:    春天,夏天

                            春天,夏天

                            秋天

如果不加[Flags]输出为:     3

                                            3

                                            秋天
当enum所有项的二进制与运算值不为0时

    [Flags]
    public enum Seasons
    {   
        //定义一个枚举类型  
        春天 = 1,
        夏天 = 2,
        秋天 = 3,
        冬天 = 4         
    }  
    class Program
    {
        static void Main(string[] args)
        {
            //两边求并集
            Seasons season = Seasons.春天 | Seasons.夏天;
            Console.WriteLine(season);         
            //求子集
            season = (Seasons.春天 | Seasons.夏天 | Seasons.秋天) & (Seasons.春天 | Seasons.夏天);
            Console.WriteLine(season);          
            //并集中去除两者的交集
            season = (Seasons.春天 | Seasons.夏天 | Seasons.秋天) ^ (Seasons.春天 | Seasons.夏天);
            Console.WriteLine(season);
            Console.Read();
        }
    }

输出结果为:   秋天

                        秋天

                        0

因为位域在进行二进制位运算,1|2|3=3,而1|2|4|=7每个数字将代表不同的含义。

3.Enum.Parse

[Flags]
    public enum Seasons
    {   
        //定义一个枚举类型  
        春天 = 1,
        夏天 = 2,
        秋天 = 4,
        冬天 = 8,         
    }  
    class Program
    {
        static void Main(string[] args)
        {            
            Seasons season =(Seasons) Enum.Parse(typeof(Seasons),"春天,夏天",false);
            Console.WriteLine(season);
            season = (Seasons)Enum.Parse(typeof(Seasons), "7", false);
            Console.WriteLine(season);
            Console.Read();        
        }
    }

输出 春天,夏天

         春天,夏天,秋天

         ","隔开的项是进行异或处理,“春天,夏天”是值进行了异或处理为3

        输出时:

        Console.WriteLine(season.ToString());

        输出Enum项名

       Console.WriteLine(season.ToString(“d”));

        输出Enum项值


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值