当前位置: 首页 > 编程笔记 >

详细了解C# 枚举与位枚举

凤修为
2023-03-14
本文向大家介绍详细了解C# 枚举与位枚举,包括了详细了解C# 枚举与位枚举的使用技巧和注意事项,需要的朋友参考一下

一、枚举的概念:

  C# 枚举(Enum), 枚举类型是用于声明一组命名的常数的基本数据类型(值类型);

二、枚举的定义:

  声明enum变量:

enum <enum_name> {enumeration list};

  其中enum_name 指定枚举的类型名称;  enumeration list 是一个用逗号分隔的标识符列表;

  枚举列表中的每个符号代表一个整数值,一个比他前面的符号大的整数值。默认情况下,第一个枚举符号的值是0.例如:

enum Days {Sun , Mon, tue, Fir, sat };

三、枚举的案例,枚举变量的用法:

using System;
namespace EnumApplication
{
 class EnumProgram
 {
   enum Days { Sun, Mon, tue, Wed, thu, Fri, sat };
   
   static void Main(string[] args)
   {
    int WeekdayStart = (int)Days.Mon;
    int WeekdayEnd = (int)Days.Fir;
    Console.WriteLine("Monday:{0}",WeekdayStart); 
    Console.WriteLine("Firday:{0}",WeekdayEnd ); 
    Console.ReadKey();
   } 
 }
}

四、Enum类:

  所有枚举类型都隐式地继承System.Enum 类型, System.Enum 类型是继承自System.ValueType类型唯一不为值类型的引用类型;

五、Enum 类:

方法 描述
CompareTo 将此实例与指定对象进行比较并返回一个对二者的相对值的指示
Equals:指示此实例是否等于指定的对象;
Format 根据指定格式将指定枚举类型的指定值转换为其等效的字符串表示形式
GetName 在指定枚举中检索具有指定值的常数的名称
GetNames 检索指定枚举中常数名称的数组
GetTypeCode 返回此实例的基础TypeCode
GetUnderlyingTye 返回指定枚举的基础类型
GetValues 指定枚举中常数值的数组
HasFlag 确定当前实例中是否设置了一个或多个位域
IsDefined 返回指定枚举中是否存在具有指定值的常数的指示
Parse 将一个或多个枚举常数的名称或数字值得字符串表示转换成等效得枚举对象,一个参数指定该操作是否不区分大小写
TryParse 将一个或多个枚举常数得名称或数字值得字符串表示转换成等效得枚举对象,用于指示转换是否成功得返回值

六、标志枚举/位枚举:

  C# 标记枚举(Flags):枚举类型是用于声明一组命名得常数得基本类型数据(值类型)。

  枚举值是互斥得。而位标记集合是一种由组合出现得元素形成得列表,通常设计为以“位或”运算组合新值;

  枚举类型则通常表达一种语义相对独立得数值集合。而以枚举类型来实现位标记集合是最完美得组合,简称位枚举。

七、位枚举得定义: 

///<summary>
  /// 权限枚举
  ///</summary>
  [Flags]
  public enum permission                     注意加了[Flags]特性后有三种写法,
  {                                  一种是使用<<符号,
    Unknown = 0; // 也可以写成0x00或0             第二种是0x01,                
                                    还有一种是直接写0,1,2,4,8....,
    Create = 1<<0, // 0x01或1                 一般来说是2的n次方来表示。  
                                    注:<<左操作符,表示对这个数进行移位。
   Read = 1<<1, //0x02或2

    Update = 1<<2, //0x04或4

    Delete = 1<<3 //0x08或8
  }

八、位枚举的实例:

//1、给用户创建、读取,修改和删除的权限
var parmission = Permission.Create | parmission.Read | parmission.Update | parmission.Delete;

//2、去掉用户的修改和删除权限
parmission = parmission &~parmission.Update;
parmission = parmission &~parmission.Delete;

//3、给用户加上修改的权限
parmission = parmission | parmission.Update;

//4、判断用户是否有创建的权限
var isCreate = (parmission & parmission.Create)!=0;
//或者
var isCreate = (parmission & parmission.Create)==parmission.Create;
  这时parmission枚举的值将变成0+1+4=5,它的ToSting()将变成“parmission.Create,
  parmission.Read”,parmission.Update; 这里我们可以解释为什么第五个值Delete是8而不能成为5。
  也就是说它的值不应该是前几项值的复合值。一个比较简单的方法
  就是用2的n次方来依次位每一项赋值,例如:1,2,4,8,16,32,64.......。

以上就是详细了解C# 枚举与位枚举的详细内容,更多关于C# 枚举与位枚举的资料请关注小牛知识库其它相关文章!

 类似资料:
  • 本文向大家介绍Java枚举与.net枚举区别详解,包括了Java枚举与.net枚举区别详解的使用技巧和注意事项,需要的朋友参考一下 通过一段时间的项目实践,发现java中的枚举与.net中的枚举有很大的差别,初期造成了我对java中的枚举一些错误理解及部分有缺陷的应用,其实追其原因还是因为我会习惯性的认为java的枚举在作用以及定义上与.net应该是差不多的,毕竟两者都是高级语言,语言上也有很多相

  • 我不得不说我不理解Scala枚举类。我可以从文档中复制粘贴示例,但我不知道是怎么回事。 什么是?为什么我必须写这个? 为什么?这到底是什么意思? 为什么必须导入对象?并且, 当我编写时,为什么要键入,而不是键入?

  • 本文向大家介绍C#中可枚举类型详解,包括了C#中可枚举类型详解的使用技巧和注意事项,需要的朋友参考一下 枚举是迭代一个集合中的数据项的过程。 我们经常使用的大多数集合实际上都已经实现了枚举的接口IEnumerable和IEnumerator接口,这样才能使用foreach迭代,有些是含有某种抽象了枚举细节的接口:ArrayList类型有索引,BitArray有Get方法,哈希表和字典有键和值...

  • 本文向大家介绍C#中枚举的特性 FlagAttribute详解,包括了C#中枚举的特性 FlagAttribute详解的使用技巧和注意事项,需要的朋友参考一下 写在前面 枚举Enum 全称(Enumeration),即一种由一组称为枚举数列表的命名常量组成的独特类型。可以看出枚举的出现时为了使我们可以在程序中方便的使用一些特定值的常量,一般的使用大家都比较熟悉,本文主要介绍枚举的特性 FlagAt

  • 本文向大家介绍详解Java中的 枚举与泛型,包括了详解Java中的 枚举与泛型的使用技巧和注意事项,需要的朋友参考一下 详解Java中的 枚举与泛型 一:首先从枚举开始说起 枚举类型是JDK5.0的新特征。Sun引进了一个全新的关键字enum来定义一个枚举类。下面就是一个典型枚举类型的定义:    显然,enum很像特殊的class,实际上enum声明定义的类型就是一个类。 而这些类都是类库中En

  • 本文向大家介绍C#枚举类型和结构体详解,包括了C#枚举类型和结构体详解的使用技巧和注意事项,需要的朋友参考一下 注意:枚举类型和结构体都属于值类型。 结构体:就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样。  一、定义的方法: 以上的语句就是定义一个名称为student的结构体,其中包含int类型的年龄、分数、总和,和string类型的姓名、性别。  二、用法:  在main主