1. 重要

1.1. Color.Red.ToString()

1.2. Color.Red.GetHashCode()

2. 基础知识

2.1. 相关概念

枚举类型(enum type)是具有一组命名常量的独特的值类型。在以下示例中:

  1. enum Color
  2. {
  3. Red,
  4. Green,
  5. Blue
  6. }

声明一个名为 Color 的枚举类型,该类型具有三个成员:Red、Green 和 Blue。 枚举具体是怎么声明呢?枚举声明用于声明新的枚举类型。枚举声明以关键字 enum 开始,然后定义该枚举类型的名称、可访问性、基础类型和成员。具体格式:

  1. 修饰词(newpublicprotectedinternalprivateenum 枚举类型名:整数类型
  2. {
  3. enum-member-declarations,
  4. enum-member-declaration
  5. }

3. 枚举的定义,枚举的用法,获取枚举值

3.1. 定义枚举类型

  1. public enum Test
  2. {
  3. = 0,
  4. = 1
  5. }

3.2. 获取枚举值

  1. public void EnumsAction()
  2. {
  3. var s = Test.男;//男
  4. var s2 = (int)Test.男;//0
  5. var a = Test.男.ToString();//"男"
  6. var r = (Test)1;//女
  7. var x = (Test)Enum.Parse(typeof(Test), "男");//男
  8. var x2 = Enum.Parse(typeof(Test), "男");//男
  9. var x3 = Enum.GetName(typeof(Test),0);//"男"
  10. foreach (var item in Enum.GetValues(typeof(Test)))
  11. {
  12. var v = item;//男[女]
  13. var v2 = (int)item;//0[1]
  14. var t = item.GetType();//{Name = "Test" FullName = "BaseControl.Enum.Test"}
  15. var g = item.ToString();//"男"["女"]
  16. }
  17. }

对于typeof的解释:https://wenda.so.com/q/1365708081065503?src=150

  1. C# typeof() 和 GetType()区是什么?
  2. 1typeof(x)中的x,必须是具体的类名、类型名称等,不可以是变量名称。
  3. 2GetType()方法继承自Object,所以C#中任何对象都具有GetType()方法,它的作用和typeof()相同,返回Type类型的当前对象的类型。
  4. 比如有这样一个变量i:
  5. Int32 i = new Int32();
  6. i.GetType()返回值是Int32的类型,但是无法使用typeof(i),因为i是一个变量,如果要使用typeof(),则只能:typeof(Int32),返回的同样是Int32的类型。

附上另一篇枚举详解:https://www.cnblogs.com/eggTwo/p/5950131.html

4. 枚举的描述属性

在使用枚举类型时,我们需要取名称和值,甚至有时候还需要取枚举类型的描述。通过反射,我们能获取到枚举类型的描述属性。

  • 首先我们需要给枚举类型添加描述属性(属性都没有是不可能取到的),[Description]就是描述属性,使用这个属性,我们需要添加 using System.ComponentModel 引用。
  1. public enum EnumSex
  2. {
  3. /// <summary>
  4. /// 男
  5. /// </summary>
  6. [Description("男")]
  7. Male = 0,
  8. /// <summary>
  9. /// 女
  10. /// </summary>
  11. [Description("女")]
  12. Female = 1
  13. }
  • 接着我们需要写一个获取描述属性的方法,FieldInfo需要添加 using System.Reflection 引用,DescriptionAttribute需要添加 using System.ComponentModel 引用。
  1. public string GetEnumDescription(Enum enumValue)
  2. {
  3. string value = enumValue.ToString();
  4. FieldInfo field = enumValue.GetType().GetField(value);
  5. object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false); //获取描述属性
  6. if (objs == null || objs.Length == 0) //当描述属性没有时,直接返回名称
  7. return value;
  8. DescriptionAttribute descriptionAttribute = (DescriptionAttribute)objs[0];
  9. return descriptionAttribute.Description;
  10. }
  • 好了,现在我们可以获取到枚举的描述了
  1. 同理,我们可以给枚举类型赋上其他类型的属性,比如Obsolete,在GetEnumDescription方法里面将DescriptionAttribute换成ObsoleteAttribute,一样可以取到属性。