首页 > 代码库 > C#-------------枚举

C#-------------枚举

声明一个枚举:

    public enum Week
    {
        one = 1,
        two = 2,
        three
    }

反编译

技术分享

我们可以看到,我们创建的枚举自动继承自System.Enum,那么Enum又是怎么样的呢?

技术分享

可以看到Enum是一个抽象类,它继承自ValueType但它又不是一个值类型,所以它有点特殊

那么枚举中到底可以有哪些类型呢?

技术分享

 

 通过查看源代码我们看到了一个ValuesAndNames这个类,所以说,只要是不大于ulong的整数都可以作为值

 既然我们知道了怎么声明,接下来就是如何使用了以及转换

技术分享

掌握了上面的基本也就掌握了枚举,当然如果你先判断一个值是否在枚举中,列举枚举的值该怎么办呢?

  这时候我们就需要Enum类来帮助我们了

  判断一个值是否在枚举中

        static void Main(string[] args)
        {
            Console.WriteLine(Enum.IsDefined(typeof(Week),1));//true

            Console.Read();
        }

  列举值:

            foreach (var item in Enum.GetNames(typeof(Week)))
            {
                Console.WriteLine(item);
            }

技术分享

    当然上面的枚举有时不够用怎么办,假如我有一个颜色的枚举,红,黄,白假如红和黄混合就是红黄色0-0,那么我们是否需要在建立一个枚举值呢?

  答案可以是需要,也可以不需要,我们可以使用位枚举

    [Flags]
    public enum Week
    {
        hong = 0x1,
        huang = 0x10
    }
        static void Main(string[] args)
        {
            Week w = Week.hong | Week.huang;
            Console.WriteLine(w.ToString());
            Console.Read();
        }

技术分享

那如果要判断一个值是否在枚举中呢?

            Week w = Week.hong | Week.huang;
            Console.WriteLine((w&Week.hong)!=0);

技术分享

 

C#-------------枚举