枚举命名规则:
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());
}
}
}
}