C# 枚举

枚举

C#枚举github代码

定义

枚举是值类型;
枚举是由一个个name和value组成,value默认是从0开始累加;
System.Enum 抽象类为枚举对象提供了一系列操作方法。

枚举应用

枚举的定义

后面的value 0,1可以省略;前面的name支持中文

public enum Sex
    {
        Man = 0,
        WoMan
    }

枚举的访问

typeof关键字和GetType方法

  1. 这两个用法返回的都是Type对象,如果toString输出的就是完整的命名空间加上对象名;
  2. GetType是需要实例去调用,typeof只需要类名或者枚举名即可。

Description特性

枚举经常使用Description特性,用于页面显示
后面代码有封装

枚举代码

 public class Program
    {
        static void Main(string[] args)
        {
            Sex sex1 = Sex.Man;
            Sex sex2 = Sex.WoMan;
            //获取枚举的value
            Console.WriteLine((int)sex1); //0
            Console.WriteLine((int)sex2); //1

            //获取枚举的name (下面三种方式都可以)
            Console.WriteLine(sex1.ToString()); //Man
            Console.WriteLine(Enum.GetName(typeof(Sex),sex1)); //Man
            Console.WriteLine(Enum.GetName(sex2.GetType(),sex2)); //WoMan 

            //枚举中一般使用Description特性值用于页面显
            Console.WriteLine(sex1.GetDescription());
            Console.ReadLine();
        }
    }

    /// <summary>
    /// 枚举里面的项就相当于类里面的字段
    /// 枚举的本质其实是类
    /// 性别
    /// </summary>
    public enum Sex
    {
        [Description("男")]
        Man = 0,
        [Description("女")]
        WoMan = 1
    }

    public static class EnumExtension
    {
        public static string GetDescription(this Enum obj)
        {
            if (obj == null)
            {
                return "";
            }
            Type type = obj.GetType();
            //获取枚举的Name
            string enumName = Enum.GetName(obj.GetType(), obj);
            //获取枚举的Field,其实枚举的一个Name就是一个Field
            FieldInfo field = type.GetField(enumName);
            //获取自定义特性。一般这种特性都需要自己封装,但是Description特性
            Attribute attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute));
            if (attribute != null && attribute is DescriptionAttribute)
            {
                return (attribute as DescriptionAttribute).Description;
            }
            return "";

        }
    }
posted @ 2021-05-23 15:59  Huangxiaomao  阅读(156)  评论(0)    收藏  举报