发现对枚举的一些用法还不太熟悉,重新翻看了框架设计(第2版) CLR Via C#一书,整理了一下。

声明枚举类型:

internal enum Color
        {
            White,
            Red,
            Green,
            Blue,
            Orange
        }

1、Enum类型的静态方法GetUnderlyingType:

Public static Type GetUnderlyingType(Type enumType);

该方法返回用于容纳枚举类型值的核心类型。每个枚举类型都有一个基本类型,该类型可以是一个byte,sbyte,short,ushort,int(最常见,也是默认的),uint,long或ulong。

声明一个基本类型为byte(System.Byte)的枚举类型:

internal enum Color : byte
        {
            White,
            Red,
            Green,
            Blue,
            Orange
        }

Console.WriteLine(Enum.GetUnderlyingType(typeof(Color)));  //输出System.Byte

2、基于一个枚举类型的实例,可以调用从System.Enum继承的ToString方法,把它的值映射为以下几个字符串表示中的一个:
 
  Color c = Color.Blue;
  Console.WriteLine(c);               //"Blue" (泛型格式)
  Console.WriteLine(c.ToString());    //"Blue"(泛型格式)
  Console.WriteLine(c.ToString("G")); //"Blue"(泛型格式)
  Console.WriteLine(c.ToString("D")); //"3"(十进制格式)
  Console.WriteLine(c.ToString("X"));//"03"(十六进制格式,输出数位个数取决于enum的基本类型)
           
3、Enum类型还提供一个静态方法Format,格式化一个枚举类型的值:

public static String Format(Type enumType, Object value, String format);

使用Format方法有一个优势,允许为value参数传递一个数值,这样就不必非要有枚举类型的一个实例。
 
  Console.WriteLine(Enum.Format(typeof(Color),3,"G"));//输出"Blue"

4、Enum类型的静态方法GetValues,获取一个数组,该数组的每个元素都对应于枚举类型中的一个符号名称,每个元素都包含符号名称的值:

public static Array GetValues(Type enumType);

这个方法结合ToString方法使用,可以显示枚举类型中的所有符号名称及其对应的数值:

Color[] colors = (Color[])Enum.GetValues(typeof(Color));
  Console.WriteLine("Number of symbol defined:" + colors.Length);
  Console.WriteLine("Value\tSymbol\n-----\t-----");
  foreach (Color c in colors)
      Console.WriteLine(c.ToString("D") + "   " + c.ToString("G"));

输出如下:

Number of symbol defined:5
Value   Symbol
-----   -----
0   White
1   Red
2   Green
3   Blue
4   Orange

4、Enum类型的另一个静态方法Parse,将一个符号转换为枚举类型的一个实例:
 
  public static Object Parse(Type enumType, String value);
  public static Object Parse(Type enumType, String value, Boolean ignoreCase);

Color c = (Color)Enum.Parse(typeof(Color), "orange", true);
  Console.WriteLine(c.ToString("D")); //"4"

Color c2 = (Color)Enum.Parse(typeof(Color), "1", false);
  Console.WriteLine(c2.ToString()); //"Red"

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

另:枚举显示中文

http://www.cnblogs.com/steden/archive/2009/12/22/1629515.html

TeType.cs

using System;
using System.ComponentModel;

public enum TeType
{
    [Description("测试文本1")]
    Ta = 0,

[Description("测试文本2")]
    Tb = 1
}

ParseEnum.cs

/// <summary>
    /// 枚举
    /// </summary>
    public class ParseEnum
    {
        public static Dictionary<string, string> dicEnum = new Dictionary<string, string>();

///   <summary>  
        ///   根据Value获取枚举值的详细文本  
        ///   </summary>   
        public static string GetDescByVal(Type enumType, string enumVal)
        {          
            string text = Enum.Parse(enumType, enumVal, true).ToString();
            return GetDescByText(enumType, text);
        }

///   <summary>  
        ///   根据Text获取枚举值的详细文本  
        ///   </summary>   
        public static string GetDescription(Type enumType, string enumName)
        {
            string key = string.Format("{0}.{1}", enumType.Name, enumName);

if (dicEnum.ContainsKey(key)) { return dicEnum[key]; }

//获取字段信息  
            System.Reflection.FieldInfo[] ms = enumType.GetFields();

foreach (System.Reflection.FieldInfo f in ms)
            {
                //判断名称是否相等  
                if (f.Name != enumName) continue;

//反射出自定义属性  
                foreach (Attribute attr in f.GetCustomAttributes(true))
                {
                    //类型转换找到一个Description,用Description作为成员名称  
                    System.ComponentModel.DescriptionAttribute dscript = attr as System.ComponentModel.DescriptionAttribute;
                    if (dscript != null)
                    {
                        dicEnum.Add(key, dscript.Description);
                        return dscript.Description;
                    }
                }

}

//如果没有检测到合适的注释,则用默认名称  
            return enumName;
        }

/// <summary>
        /// 获取枚举的字典列表
        /// </summary>
        /// <param name="enumType"></param>
        /// <returns></returns>
        public static Dictionary<int, string> GetEnumList(Type enumType)
        {
            Dictionary<int, string> dict = new Dictionary<int, string>();
            foreach (int value in Enum.GetValues(enumType))
            {
                string name = Enum.GetName(enumType, value);
                if(!dict.ContainsKey(value))
                    dict.Add(value, ParseEnum.GetDescription(enumType, name));
            }
            return dict;
        }
       
    }


TestPage.aspx.cs

/// <summary>
        /// 绑定类型下拉框
        /// </summary>
        protected void BindDdlType()
        {
            Dictionary<int, string> dict = ParseEnum.GetEnumList(typeof(TeType));
            ddlType.DataSource = dict;
            ddlType.DataValueField = "key";
            ddlType.DataTextField = "value";
            ddlType.DataBind();
            ddlType.Items.Insert(0, new ListItem("-- 所有类型 --", ""));        
        }

枚举学习文摘 — 框架设计(第2版) CLR Via C#相关推荐

  1. 《CLR via C#:框架设计》读书笔记 - CLR

    第一章 CLR的执行模型 1.1 将源代码编译成托管代码 1.2 将托管模块合并成程序集 1.3 加载公共语言运行时 1.4 执行程序集代码 ?托管模块->程序集,区别 ?如何通过清单.元数据找 ...

  2. 《框架设计 CLR Via C# (第2版)》 - 学习笔记

    <框架设计 CLR Via C#> (第2版) ========== ========== ========== [作者] (美) Jeffrey Richter [译者] (中) 周靖 ...

  3. 饮水思源--浅析深度学习框架设计中的关键技术

    点击上方"深度学习大讲堂"可订阅哦! 编者按:如果把深度学习比作一座城,框架则是这座城中的水路系统,而基于拓扑图的计算恰似城中水的流动,这种流动赋予了这座城以生命.一个优雅的框架在 ...

  4. [Java版]selenium关键字驱动框架设计实战(二)

    [Java版]selenium关键字驱动框架设计实战(一)本文已参与掘金创作者训练营第三期「高产更文」赛道,详情查看:掘力计划|创作者训练营第三期正在进行,「写」出个人影响力.引言使用和学习selen ...

  5. 《JavaScript框架设计(第2版)》之语言模块

    本文摘自:人民邮电出版社异步图书<JavaScript框架设计(第2版)> 试读本书:http://www.epubit.com.cn/book/details/4849 敲重点: 活动规 ...

  6. 前沪江高级架构师学习笔记分享:分布式框架设计与实现

    1.分布式服务框架设计 分布式服务框架一般可以分为以下几个部分, (1)RPC基础层: 包括底层通信框架,如NIO框架.通信协议,序列化和反序列化协议, 以及在这几部分上的封装,屏蔽底层通信细节和序列 ...

  7. TF学习——Tensorflow框架之基础概念、设计思路、常用方法之详细攻略

    TF学习--tensorflow框架之基础概念.设计思路.常用方法之详细攻略 目录 Tensorflow框架基础概念 Tensorflow框架设计思路 Tensorflow框架常用方法 Tensorf ...

  8. 【读书笔记】《框架设计(第2版)CLR Via C#》中两个比较有趣的知识点

    本季度公司要求阅读<框架设计(第2版)CLR Via C#>这本书,由于前两个月一直很忙,也没有时间阅读,偶尔阅读也是很晚回家以后临睡前拿起这经典之作读那么一个小节.最近利用周末可以说一鼓 ...

  9. 前端埋点的缺点_【埋点学习埋点质量】埋点的框架设计及其准确性

    是新朋友吗?记得先点蓝字关注我哦- 通过前两章<送你一份埋点需求分析&设计埋点方案><一份规范的埋点需求文档该如何写?>,我们已经足够了解埋点,并且能够输出埋点文档了. ...

  10. unity之游戏UI界面框架设计实战学习(一)

    游戏UI界面框架设计实战精讲视频课程 配合上博客 刘老师讲Unity 刚开始接触UI界面. 觉得讲得非常好. 做一下笔记. 课程总体分为七大部分: 一: UI框架设计理念 整体简单介绍即将带领大家开发 ...

最新文章

  1. 被字节跳动T4级大佬鄙视了:让你10倍提升认知效率,就这3个方法!
  2. 大数据产品开发流程规范_大数据技术思想入门(三):分布式文件存储的流程
  3. UA MATH523A 实分析3 积分理论例题 Fubini定理证明积分不等式
  4. 关于Spring底层原理面试的那些问题,你是不是真的懂Spring?
  5. nginx php exec,PHP Web 端如何操作 Nginx 配置
  6. 大数据之-Hadoop3.x_Hadoop_MapReduce_介绍---大数据之hadoop3.x工作笔记0081
  7. Jetbrain系列IDE设置
  8. 第十一章 Shell常用命令与工具(一)
  9. 闫墨杰415知识点总结
  10. 百科知识:VTP(思科)
  11. 通过模板生成Excel表格——XLSTransformer
  12. Self-Supervised 3D Face Reconstruction via Conditional Estimation
  13. 【嵌入式】---- 单片机常用单位
  14. 什么是磁盘?磁盘的组成?接口和分区?
  15. 算法问题——(树问题集合)
  16. imx6ul 驱动详解
  17. 原型设计Axure的基本使用
  18. 每个初学JAVA者都应该搞懂的问题
  19. 寒假的时候,小明同学要去拜访很多朋友,恰巧他所有朋友的家都处在坐标平面的X轴上。小明可以任意选择一个朋友的家开始访问,但是每次访问后他都必须回到出发点,然后才能去访问下一个朋友。
  20. 汇报工作,被CTO怼了!让我读下麦肯锡的:结构化思考、电梯间汇报法、MECE法则!...

热门文章

  1. React Mixin
  2. requirej入门(二)
  3. [转]Oracle - 数据库的实例、表空间、用户、表之间关系
  4. 区块链、ICO,养肥的是开发者和一群黑客
  5. jmeter 线程执行顺序_JMeter基础之--元件的作用域与执行顺序
  6. 「版本升级」MyEclipse CI 2018.12.0正式发布
  7. 关于暂停或终止更新的相关读书笔记
  8. 从业务到技术weibo link card快速接入思考-2014.09.20
  9. Jmeter --- Http Cookie Manager
  10. intellij常用快捷键