.Net5 - 定义枚举,在查询中巧妙的应用方式

枚举命名规则:

1、 枚举以复数的形式命名 => 例如性别  public enum Genders { }

2、状态 以Status结尾

枚举的扩展方法:还有其他博文

 

using System;
using System.ComponentModel;
using System.Reflection;

namespace EnumDemo
{
    /// <summary>
    /// 枚举扩展方法
    /// </summary>
    public static class EnumExtensions
    {
        /// <summary>
        /// 根据枚举int值获取枚举名称
        /// </summary>
        /// <typeparam name="T">枚举类型</typeparam>
        /// <param name="status">枚举值</param>
        /// <returns></returns>
        public static string GetEnumName<T>(this int status)
        {
            return Enum.GetName(typeof(T), status);
        }


        /// <summary>
        /// 获取枚举变量值的 Description 属性
        /// </summary>
        /// <param name="obj">枚举变量</param>
        /// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
        public static string GetDescription(this Enum obj)
        {
            return GetDescription(obj, false);
        }

        /// <summary>
        /// 获取枚举变量值的 Description 属性
        /// </summary>
        /// <param name="obj">枚举变量</param>
        /// <param name="isTop">是否改变为返回该类、枚举类型的头 Description 属性,而不是当前的属性或枚举变量值的 Description 属性</param>
        /// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
        public static string GetDescription(this Enum obj, bool isTop)
        {
            if (obj == null)
            {
                return string.Empty;
            }
            Type enumType = obj.GetType();
            DescriptionAttribute dna;
            if (isTop)
            {
                dna = (DescriptionAttribute)Attribute.GetCustomAttribute(enumType, typeof(DescriptionAttribute));
            }
            else
            {
                FieldInfo fi = enumType.GetField(System.Enum.GetName(enumType, obj));
                dna = (DescriptionAttribute)Attribute.GetCustomAttribute(
                   fi, typeof(DescriptionAttribute));
            }
            if ((dna != null)
                && (string.IsNullOrEmpty(dna.Description) == false))
            {
                return dna.Description;
            }
            return obj.ToString();
        }
    }
}

  

枚举的举例验证:

 

using System.ComponentModel;

namespace EnumDemo
{
    /// <summary>
    /// 枚举以复数的形式命名
    /// </summary>
    public enum Genders
    {
        /// <summary>
        /// 女人
        /// </summary>
        [Description("女人")]
        Woman = 0,
        /// <summary>
        /// 男人
        /// </summary>
        [Description("男人")]
        Man = 1,
        /// <summary>
        /// 未知
        /// </summary>
        [Description("未知")]
        Unknown = 2
    }
}

  

namespace EnumDemo
{
    public class EmployeeInfo
    {
        public EmployeeInfo(int empId, string empName, Genders gender)
        {
            EmpId = empId;
            EmpName = empName;
            Gender = gender;
        }

        /// <summary>
        /// 编号
        /// </summary>
        public int EmpId { get; set; }

        /// <summary>
        /// 姓名
        /// </summary>
        public string EmpName { get; set; }

        /// <summary>
        /// 性别
        /// </summary>
        public Genders Gender { get; set; }

        /// <summary>
        /// 性别【汉化值】 此属性为只读get
        /// </summary>
        public string GenderName => Gender.GetDescription();

        public override string ToString()
        {
            return $"编号:{EmpId}-姓名:{EmpName}-性别:{Gender}-性别【汉化值】:{GenderName}";
        }
    }
}

  

using System;
using System.Collections.Generic;

namespace EnumDemo
{
    class Program
    {
        /// <summary>
        /// 初始化职员信息
        /// </summary>
        /// <returns></returns>
        static IList<EmployeeInfo> CreateEmployeeInfos()
        {
            var employees = new List<EmployeeInfo>
            {
                new EmployeeInfo(1, "张三", Genders.Man),
                new EmployeeInfo(2, "李四", Genders.Woman),
                new EmployeeInfo(3, "王五", Genders.Woman),
                new EmployeeInfo(4, "陈大", Genders.Man),
                new EmployeeInfo(5, "钱二", Genders.Unknown)
            };
            return employees;
        }

        static void Main(string[] args)
        {
            #region enum、int、string之间的相互转换
            Genders manValue = Genders.Man;// => Man
            //枚举转string
            string manStr = manValue.ToString();//效率低 => Man
            string manStr2 = Enum.GetName(typeof(Genders), manValue);// => Man
            //int转string
            int num = 0;
            string manStr5 = Enum.GetName(typeof(Genders), 0);// => Woman
            string manStr3 = num.GetEnumName<Genders>();// => Woman
            //枚举转int
            int number = (int)manValue;// => 1
            int number2 = manValue.GetHashCode();// => 1
            int number3 = Convert.ToInt32(manValue);// => 1
            //string转枚举
            Genders man = (Genders)Enum.Parse(typeof(Genders), "Man");// => Man
            Genders woman = (Genders)Enum.Parse(typeof(Genders), "0");// => Woman
            //string转int
            int number5 = Convert.ToInt32(Enum.Parse(typeof(Genders), "Man"));// => 1
            //int转枚举
            Genders man2 = (Genders)1;// => Man
            Genders woman2 = (Genders)Enum.ToObject(typeof(Genders), 0);// => Woman
            #endregion

            //返回查询数据展示枚举汉语字时
            var employees = CreateEmployeeInfos();
            foreach (var item in employees)
            {
                Console.WriteLine(item.ToString());
            }
        }
    }
}

  

posted @ 2021-02-02 23:24  gygtech  Views(306)  Comments(0Edit  收藏  举报