ITPUB??ì3
ITPUB论坛 » Web开发 » ASP.NET与AJAX » C# Enum设计和使用的相关技巧

新一届的微软MVP评选已经开始,欢迎各位推荐!

标题: C# Enum设计和使用的相关技巧
离线 elanglee
一般会员



精华贴数 0
个人空间 15
技术积分 512 (3790)
社区积分 5 (15987)
注册日期 2006-5-25
论坛徽章:0
      
      

发表于 2006-11-20 10:25 
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 static Permission ClearFlag(Permission value, Permission flag)  

{        

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

    return value;

}


__________________
浮云游子意,落日故人情MSN:sunny83219@hotmail.com
只看该作者    顶部
离线 flyingknife
版主



精华贴数 0
个人空间 0
技术积分 818 (2311)
社区积分 27 (6525)
注册日期 2001-9-28
论坛徽章:3
管理团队成员授权会员ITPUB新首页上线纪念徽章   
      

发表于 2006-11-22 10:04 
嘻嘻

发现自己用枚举的时候,很少用到枚举常量呢.

又长见识了.

:-)


只看该作者    顶部
离线 charles_gao
老会员



精华贴数 0
个人空间 0
技术积分 2805 (546)
社区积分 50 (4893)
注册日期 2004-6-14
论坛徽章:12
会员2006贡献徽章授权会员开发板块每日发贴之星   
      

发表于 2006-11-23 14:20 
Good.


只看该作者    顶部
离线 lonfone.sun
初级会员



精华贴数 0
个人空间 0
技术积分 24 (48275)
社区积分 1 (41315)
注册日期 2006-5-13
论坛徽章:0
      
      

发表于 2006-11-24 17:12 
只有一点不好, 字符串转为枚举类型时的代码很难受


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问