zoukankan      html  css  js  c++  java
  • C#点点滴滴:枚举enum

    一、enum简介

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

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

    二、enum类型

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

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

    三、enum的值

    声明:

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

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

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

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

    使用:

     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     }

     四、enum枚举的常用方法

    a. 获取enum枚举字符串

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

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

    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 }

    五、 其他

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

    OK!

    每天努力一点点,加油!

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

    作者:庞辉

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

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

  • 相关阅读:
    HDU-6534-Chika and Friendly Pairs (莫队算法,树状数组,离散化)
    SPOJ-DQUERY-D-query
    视频上云/网络穿透/拉转推工具EasyNTS设备IP地址返回数据与实际IP匹配的筛选机制优化
    视频上云/网络穿透/拉转推工具EasyNTS新增获取windows所有盘符信息功能的实现
    【解决方案】热门景区实现智慧旅游,城市道路/风景区视频公众号分享该如何实现?
    TSINGSEE青犀视频开发webrtc使用ffmpeg编译报ffmpeg version: N-94448-G3CEA9CD219提示是什么原因
    TSINGSEE青犀视频开发webrtc浏览器使用video标签播放webrtc本地录音音频实现过程
    【解决方案】智慧农业自动化的浪潮下,大棚实时视频监控系统应该如何搭建?
    【解决方案】房地产行业施工现场搭建视频4G无线远程视频监管信息化行业应用方案建议书
    【解决方案】国标GB28181协议视频智能分析平台EasyCVR搭建智慧养殖平台,让畜牧业实现“万物互联”
  • 原文地址:https://www.cnblogs.com/pang123hui/p/3395651.html
Copyright © 2011-2022 走看看