C# 枚举

一、枚举介绍

  当我们需要定义一个变量,且该变量的范围是有限的,就可以使用枚举。比如:定义一周Days,只能有{ 周一...周日 }。 Days today变量只能从该7个值中取其中1个为其赋值。  

  枚举(enum)是一组命名的整数常量。枚举类型是使用enum关键字来声明。C# 枚举是值数据类型。 换句话说,枚举包含其自己的值,并且不能继承或不能传递继承。

enum Days
{
  Monday=1, Tuesday, Wednesday, Thursday, Friday, Saturday,Sunday,
};

Days today = Days.Monday;

int today_int = (int)Days.Monday;

二、函数介绍

名称

描述

Format

static string Format(Type enumType, object value, string format);

根据指定格式将指定枚举类型的指定值转换为其等效的字符串表示形式。

GetName

static string GetName(Type enumType, object value);

在指定枚举中检索具有指定值的常数的名称。

GetNames

static string[] GetNames(Type enumType);

检索指定枚举中常数名称的数组。

GetValues

static Array GetValues(Type enumType);

检索指定枚举中常数值的数组。

 

 

 

 

 

 

 

 

 

 

 

 

 


定义

enum Days
{
  Monday=1, Tuesday, Wednesday, Thursday, Friday, Saturday,Sunday,
};

Days里面的变量,值 从指定的数字开始,依次递增。 若无指定,默认从0开始。

值可以重复,比如Saturday=1后,Monday和Saturday都为1,Tuesday和Sunday都为2 。


 取值

Days today_1 = Days.Monday;
Days today_2 = (Days)1;
Days today_3 = (Days)Enum.Parse(typeof(Days),"1");

取int值

int today_1_int = (int)Days.Monday;  //today_1_int : 1

int today_1_int = (int)today_1;    //today_1_int : 1


GetName函数

完整函数:

  static string GetName(Type enumType, object value);

使用示例:

  string str_today = "";

  str_today = Enum.GetName(typeof(Days), Days.Monday);  //"Monday"
  str_today = Enum.GetName(typeof(Days), 1);        //"Monday"

 

 


 GetNames函数

完整函数:

  static string[] GetNames(Type enumType);

使用示例:

  foreach (string one_name in Enum.GetNames(typeof(Days)))

    {
      Console.WriteLine( one_name );
    }

 输出:

Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

 


 GetValues函数

完整函数:

  static Array GetValues(Type enumType);

使用示例:

  foreach (var one_value in Enum.GetValues(typeof(Days)))

    {
      Console.WriteLine(one_value + ":" + (int)one_value);
    }

 输出:

Monday:1
Tuesday:2
Wednesday:3
Thursday:4
Friday:5
Saturday:6
Sunday:7

 


三、总结

C# 枚举的优点:
  • 枚举可以使代码更易于维护,有助于确保给变量指定合法的、期望的值
  • 枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊的数来表示。

 

原文地址:https://www.cnblogs.com/01zxs/p/9467776.html