enum使用:C# Enum设计和使用的相关窍门技巧

  Enum运算通常涉及到位运算(AND、OR、XOR)按位运算, 常使用FlagsAttribute 自定义属性定义FlagsAttribute 和 Enum 准则:

  只有要对数值执行按位运算(AND、OR、XOR)时才对枚举使用 FlagsAttribute 自定义属性

  用 2 幂(即 1、2、4、8 等)定义枚举常量这意味着组合枚举常量中各个标志都不重叠

  请考虑为常用标志组合创建个枚举常量例如如果用于文件 I/O 操作枚举包含枚举常量 Read = 1 和 Write = 2请考虑创建枚举常量 ReadWrite = Read OR Write该常量组合了 Read 和 Write 标志此外在某些情况下可能会将用于组合标志按位 OR 运算视为种高级概念在简单任务中不需要执行此操作

  将负数定义为标志枚举常量时应谨慎很多标志位置都可能设置为 1这可能使您代码产生混淆并易于发生代码

  测试数值中是否已设置标志种简便思路方法为:在数值和标志枚举常量的间执行按位“和”操作这种思路方法会将数值中和标志不对应所有位都设置为零然后测试该操作结果是否等于该标志枚举常量

  将 None 用作值为零标志枚举常量名称在按位 AND 运算中不能使用 None 枚举常量测试标志所得结果始终为零但是您可以在数值和 None 枚举常量的间执行逻辑(不是按位)比较以确定数值中是否已设置任何位

  如果创建是值枚举而不是标志枚举创建 None 枚举常量仍十分有用原因是在默认情况下公共语言运行库会将用于枚举内存化为零因此如果不定义值为零常量则枚举在创建时将包含非法值

  如果明显存在应用需要表示默认情况请考虑使用值为零枚举常量表示默认值如果不存在默认情况请考虑使用值为零枚举常量(这意味着该情况不由任何其他枚举常量表示)

  不要仅为了反映枚举自身状态而定义枚举值例如不要定义仅用于标记枚举末尾枚举常量如果需要确定枚举最后个值请显式检查该值此外如果枚举常量范围中所有值都有效还可以对第个和最后个枚举常量执行范围检查

  不要指定保留供将来使用枚举常量

  在定义采用枚举常量作为值思路方法或属性时应考虑对该值进行验证原因是即使没有在枚举中定义某个数值也可以将该数值强制转换为枚举类型

  窍门技巧1:如何去除个枚举项:

  例如定义了权限Enum Permission:

  [Flags]

public enum Permission{
   Select = 1,
   Edit = 2,
   Delete = 4,
   View = 8,  
   All = Select | Edit | Delete | View
 } 


  可以采用这个进行计算:

public Permission ClearFlag(Permission value, Permission flag) 
{    
  value = value & (Permission.All^ flag);
   value;
}


  http://www.cnblogs.com/shanyou/archive/2006/11/16/562816.html

Tags:  typedefenum javaenum javaenum使用 enum使用

延伸阅读

最新评论

发表评论