C#点点滴滴:枚举enum

1、enum简介

  • enum为枚举类型,即一种由一组称为枚举数列表的命名常量组成的独特类型
  • 在声明一个枚举时,要指定该枚举能够包含的一组可接受的实例值,还能够给值指定易于记忆的名称

注:若是在代码中试图把一个不在可接受值范围内的值赋予枚举的一个实例,编译器就会报告一个错误性能

2、enum类型

枚举类型能够是:byte、sbyte、shout、ushort、int、uint、long、ulong,默认值为int类型ui

访问修辞符 enum 枚举名:基础类型
{
        枚举成员
}  (这里C#不须要加分号)this

3、enum的值

声明:spa

1 public enum TimeOfDay
2 {
3     Morning = 0,
4     Afternoon = 1,
5     Evening = 2,
6 };

若是不为枚举数列表中的元素指定值,则它们的值将以 1 为增量自动递增。在前面的示例中,Days.Morning的值为 0,Days.Afternoon的值为 1,依此类推。code

住:容许多个枚举成员有相同的值,容许无顺序地定义成员值,没有显式赋值的成员的值默认为上一个成员的值+1(第一个成员若是没赋值的话默认就是0)。另外,枚举值都不能超过它的基础类型范围。对象

1 public enum TimeOfDay
2 {
3     Morning = 0,
4     Afternoon = 2,
5     Evening,    // == 3
6 };

使用:blog

 1 public string getTimeOfDay(TimeOfDay time)
 2     {
 3         string result = string.Empty;
 4         switch (time)
 5         {
 6             case TimeOfDay.Morning:
 7                 result = "上午";
 8                 break;
 9             case TimeOfDay.Afternoon:
10                 result = "下午";
11                 break;
12             case TimeOfDay.Evening:
13                 result = "晚上";
14                 break;
15             default:
16                 result = "未知";
17                 break;
18         }
19         return result;
20     }

 

 4、enum枚举的经常使用方法

a. 获取enum枚举字符串字符串

1 TimeOfDay time = TimeOfDay.Afternoon;
2 
3 Console.WriteLine(time.ToString());//输出:Afternoon

b. 获取enum枚举字符串对应的值get

1 TimeOfDay time2 = (TimeOfDay) Enum.Parse(typeof(TimeOfDay), "afternoon", true);
2 
3 Console.WriteLine((int)time2);//输出1

Enum.Parse()这个方法带3个参数,原型以下:原型

 1 // 参数
 2 // enumType
 3 // 枚举的 Type。
 4 // value
 5 // 包含要转换的值或名称的字符串。
 6 // ignoreCase
 7 // 若是为 true,则忽略大小写;不然考虑大小写。
 8 // 返回值
 9 // enumType 类型的对象,其值由 value 表示。
10 public static Object Parse (
11     Type enumType,
12     string value,
13     bool ignoreCase
14 )

 最后,注意Enum.Parse()方法实际上返回一个对象引用—— 咱们须要把这个字符串显式转换为须要的枚举类型(这是一个取消装箱操做的例子)。对于上面的代码,将返回1,做为一个对象,对应于TimeOfDay.Afternoon的枚举值。在显式转换为int时,会再次生成1。

c. 获取enum某个值对于的字符串

1 lbOne.Text = Enum.GetName(typeof(TimeOfDay), 0);
2 lbOne.Text = ((TimeOfDay)0).ToString();//返回:Morning

若有有两个字符串的值是同样的,则返回的是第一个匹配值的字符串。

上述两种方法都能实现,可是当其值越界(不是枚举所列出的值),就有必定的区别了。你们能够根据本身的需求不一样,选择合适的方法。

1 lbCon.Text = ((TimeOfDay)5).ToString(); //返回:5,若是越界返回原值
2 this.lbGetName.Text = Enum.GetName(typeof(TimeOfDay), 5); //返回:空字符串,若是越界返回空字符串

d.获得enum枚举的全部的值 

1 foreach (int i in Enum.GetValues(typeof(TimeOfDay)))
2 {
3      lbValues.Text += i.ToString();
4 }

d.获得enum枚举的全部值对应的字符串

1 foreach(string temp in Enum.GetNames(typeof(TimeOfDay)))
2 {
3       lbNames.Text += temp;
4 }

 

5、 其余

在C#中,枚举的真正强大之处是它们在后台会实例化为派生于基类System.Enum的结构。这表示能够对它们调用方法,执行有用的任务。注意由于.NET Framework的执行方式,在语法上把枚举当作结构是不会有性能损失的。实际上,一旦代码编译好,枚举就成为基本类型,与int和float相似。

 

OK!

天天努力一点点,加油!

------------------------------------------------------------------------------------------

做者:庞辉

出处:http://www.cnblogs.com/pang123hui/

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,可是必须保留本文的署名庞辉(包含连接).

相关文章
相关标签/搜索