1、基础

  • 枚举类型(enumerated types)定义了一组“符号名称/值”配对。
  • 枚举类型是值类型,每个枚举类型都是从System.Enum派生的,而System.Enum又是从System.ValueType派生,而其后又是从System.Object派生而来
  • 枚举类型没有方法属性和事件,但是可以通过扩展方法进行模拟向枚举类型添加方法。

2、例子与IL分析

   对于以下的一个枚举类型,通过IL可以知道其内部的结构如下图(1-1)所示:

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

  通过IL代码可知,对于Blue,Green等其内部实现是常量int32的类型,该枚举类型继承与System.Enum类。C#编译器将枚举类型视为基元类型,所以可以用许多操作符(==,!=,<,>,<=,>=,+,-,^,&,|,~,++和--来操作没绝类型的实例,这些操作符实际上作用于每个枚举类型实例内部的value__实例字段。

3、对于System.Enum下的常用静态方法

 
编号 名称 说明
 1 GetName 在指定枚举中检索具有指定值的常数的名称。
 2 GetNames 检索指定枚举中常数名称的数组。
 3 GetUnderlyingType 返回指定枚举的基础类型。
 4 GetValues 检索指定枚举中常数值的数组。
 5 IsDefined 返回指定枚举中是否存在具有指定值的常数的指示。
 6 Parse(Type, String) 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。
 7 Parse(Type, String, Boolean) 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。 一个参数指定该操作是否不区分大小写。
 8 TryParse<TEnum>(String, TEnum) 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。 用于指示转换是否成功的返回值。
 9 TryParse<TEnum>(String, Boolean, TEnum) 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。 一个参数指定该操作是否区分大小写。 用于指示转换是否成功的返回值。

4、位标志(FlagsAttribute特性)

枚举类型表示单个数值,而位标志表示一组位,其中有些位处于on状态,有些位处于off状态。【二进制中1代表on,0代表off】,对于位标志的枚举实例输出内部会直接ToString输出,将会直接格式化与名字枚举名称相对应的字符串并且中间用逗号隔开。具体的代码如下所示,其生成后的结果如图1-2
using System;
public class temp
{
public static void Main(){
var color=Color.Green | Color.Red;
Console.WriteLine(color);
}
}
[Flags]
public enum Color{
White=,
Red=,
Green=,
Blue=,
Orange=
}
 
    

【CLR Via C#】15 枚举类型与位类型的更多相关文章

  1. [CLR via C#]15. 枚举类型和位标志

    一.枚举类型 枚举类型(enumerated types)定义了一组"符号名称/值"配对. 例如,以下Color类型定义了一组符号,每个符号都标识一种颜色: internal en ...

  2. 重温CLR(十一) 枚举类型、位标志和数组

    枚举类型 枚举类型(enumerated types)定义了一组"符号名称/值"配对.例如,以下Color类型定义了一组符号,每个符号都标识一种颜色: internal enum ...

  3. 【C#进阶系列】15 枚举类型和位标志

    实际上本章就只讲枚举类型,因为位标志本来就可以当做一个特殊的枚举类型. 关于枚举类型 枚举类型是一种消灭魔法数字的好方法,使程序更容易编写,阅读和维护. 枚举类型是值类型,然而有别于其它值类型,枚举类 ...

  4. 《CLR via C#》---枚举标志和标志位

    枚举类型 枚举类型定义了一组符号名称/值配对. 如 private enum Color /* : byte */ { White, // Assigned a value of 0 Red, // ...

  5. 异常跟踪之CLR 类型到 EDM 类型的映射不明确

    异常信息: "指定的架构无效.错误: CLR 类型到 EDM 类型的映射不明确,因为多个 CLR 类型与 EDM 类型“Person”匹配. 以前找到的是 CLR 类型“A.Person”, ...

  6. [CLR via C#]5.2 引用类型和值类型

    原文:[CLR via C#]5.2 引用类型和值类型 CLR支持两种类型:引用类型和值类型. 虽然FCL中大多数都是引用类型,但开发人员用的最多的还是值类型.引用类型总是在托管堆上分配的,C#的ne ...

  7. { MySQL基础数据类型}一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型

    MySQL基础数据类型 阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己 ...

  8. [Clr via C#读书笔记]Cp5基元类型引用类型值类型

    Cp5基元类型引用类型值类型 基元类型 编译器直接支持的类型,基元类型直接映射到FCL中存在的类型. 作者希望使用FCL类型名称而避免使用关键字.他的理由是为了更加的清晰的知道自己写的类型是哪种.但是 ...

  9. 指定的架构无效。错误: CLR 类型到 EDM 类型的映射不明确

    在使用WebService开发时,同时使用了EF和linq,查询数据时,使用linq(查询订单)可以正常拉出数据, 但是使用EF(查询用户)却会报以下错误: {"指定的架构无效.错误: \r ...

随机推荐

  1. Docker中使用createdump调试coreclr

    应用上线后可能出现一些问题,通过源码排查,日志分析都不能确定具体原因的情况下,可以使用dump转存文件分析,netcore对于linux系统dump提供了createdump工具,配合lldb sos ...

  2. eclipse下搭建shell脚本编辑器--安装开发shell的eclipse插件shelled

    具体请看: 亲测有效: http://www.cnblogs.com/shellshell/p/6122811.html

  3. CentOS7下搭建FastDfs(V5.11)+Keepalived分布式集群部署

    FastDfs介绍 http://kb.cnblogs.com/page/82280/ 1.准备 系统 CentOS7 最小化安装. #VIP虚拟IP 10.1.6.218 #Keepalived 1 ...

  4. 解决 Error: ENOSPC: System limit for number of file watchers reached

    manjaro 18.0 kde版本 运行 yarn test报错 Error: ENOSPC: System limit for number of file watchers reached 解决 ...

  5. 《Netty权威指南》(三)Netty 入门应用

    Netty 服务端   Netty 客户端

  6. SpringBoot 配置热部署

    做个记录,以免忘记: 1. 在 pom.xml 文件中的 dependencies 标签以内添加组件 devtools,具体内容如下: <!-- SpringBoot 热部署组件 devtool ...

  7. JVM学习记录-Java内存模型(一)

    前言 Java虚拟机规范中定义了一种Java的内存模型,即Java Memoory Model(简称JMM),用来实现让Java程序在各个平台下都能达到一致的内存访问效果.JVM是整个虚拟机,JMM模 ...

  8. Git学习笔记3

    git checkout 命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况: 一种是readme.txt自修改后还没有 ...

  9. 记一次Java AES 加解密 对应C# AES加解密 的一波三折

    最近在跟三方对接 对方采用AES加解密 作为一个资深neter Ctrl CV 是我最大的优点 所以我义正言辞的问他们要了demo java demo代码: public class EncryptD ...

  10. jQuery加载部分视图(Partial Views)

    本篇是演示使用jQuery加载部分视图(Partial View).如果你不想使用Razor的语法呈现部分视图,那此篇的方法是最理想的了.它可以Render至指定的tag上. 创建两个部分视图,一个为 ...