c# enum设计和使用的相关技巧 _c#应用
2008-02-23 05:44:11来源:互联网 阅读 ()
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;
}
http://www.cnblogs.com/shanyou/archive/2006/11/16/562816.html
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash