C# 枚举
枚举
定义
枚举是值类型;
枚举是由一个个name和value组成,value默认是从0开始累加;
System.Enum 抽象类为枚举对象提供了一系列操作方法。
枚举应用
枚举的定义
后面的value 0,1可以省略;前面的name支持中文
public enum Sex
{
Man = 0,
WoMan
}
枚举的访问
typeof关键字和GetType方法
- 这两个用法返回的都是Type对象,如果toString输出的就是完整的命名空间加上对象名;
- 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 "";
}
}

浙公网安备 33010602011771号