C# Enum设计和采用的连锁技术

C#的Enum设计的连带引导在网上有相关小说论述:

英文:Design
Guidelines Update: Enum
Design

中文:C# Idioms:
Enum还是Enum
Class(枚举类)  

Enum的运算平时涉及到位运算(AND、OLAND、XO安德拉),按位运算, 常使用FlagsAttribute 自定义属性定义。FlagsAttribute 和 Enum 的规则:

  • 只有要对数值执行按位运算(AND、O帕杰罗、XOENVISION)时才对枚举使用 FlagsAttribute 自定义属性。

  • 2 的幂(即
    壹 、二 、④ 、8
    等)定义枚举常量。那意味组合的枚举常量中的各类标志都不重叠。
  • 请考虑为常用标志组合创制二个枚举常量。例如,借使用于文书
    I/O 操作的枚举包罗枚举常量 Read = 1 和 Write = 2,请考虑创立枚举常量 ReadWrite = Read O君越 Write,该常量组合了 Read 和 Write 标志。此外,在有个别意况下,或然会将用来组合标志的按位
    O奥迪Q5 运算视为一种高级概念,在简单义务中不须求实施此操作。
  • 将负数定义为标志枚举常量时应小心,因为众多标明地方都可能安装为
    1,那说不定使您的代码产生模糊并不难发生代码错误。
  • 测试数值中是不是已设置标志的一种便利方法为:在数值和标志枚举常量之间进行按位“与”操作,那种方法会将数值中与标明不对应的具有位都设置为零,然后测试该操作的结果是不是等于该标志枚举常量。
  • 将 None 用作值为零的标志枚举常量的称呼。在按位
    AND 运算中,不能动用 None 枚举常量测试注脚,因为所得的结果一直为零。可是,您能够在数值与 None 枚举常量之间进行逻辑(不是按位)相比,以显明数值中是不是已设置任何位。
  • 一旦成立的是值枚举而不是标志枚举,成立 None 枚举常量仍拾叁分实惠。原因是在默许情状下,公共语言运维库会将用以枚举的内部存款和储蓄器初步化为零。由此,尽管不定义值为零的常量,则枚举在制造时将含有不合规值。
  • 假使显明存在应用程序供给代表的默许情状,请考虑使用值为零的枚举常量表示暗中认可值。要是不设有默许意况,请考虑动用值为零的枚举常量(那象征本场合不由任何此外枚举常量表示)。
  • 毫无仅为了反映枚举自己的情形而定义枚举值。例如,不要定义仅用于标记枚举末尾的枚举常量。假使急需分明枚举的最终1个值,请显式检查该值。其余,就算枚举常量范围中的全部值都使得,还足以对第3个和终极二个枚举常量执行范围检查。
  • 决不钦点保留供以后采用的枚举常量。
  • 在概念采纳枚举常量作为值的主意或质量时,应考虑对该值实行验证。原因是正是没有在枚举中定义有个别数值,也能够将该数值强制转换为枚举类型。

    

   技巧1:怎么着去除二个枚举项:

 例如定义了权限Enum
Permission:

[Flags]

public
enum Permission{

      Select = 1,

      Edit = 2,

      Delete = 4,

      View = 8,   

      All = Select | Edit | Delete |
View

  } 

能够应用这些函数举办总计:

public static Permission ClearFlag(Permission value, Permission flag)
 

{       

    value = value &
(Permission.All^ flag);

    return value;

}

相关文章