FlagsAttribute
来源:互联网 发布:老外 淘宝 编辑:程序博客网 时间:2024/06/13 12:55
用于 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 枚举常量仍十分有用。原因是在默认情况下,公共语言运行时会将用于枚举的内存初始化为零。因此,如果不定义值为零的常量,则枚举在创建时将包含非法值。
如果明显存在应用程序需要表示的默认情况,请考虑使用值为零的枚举常量表示默认值。如果不存在默认情况,请考虑使用值为零的枚举常量(这意味着该情况不由任何其他枚举常量表示)。
-
不要定义只映射枚举本身状态的枚举值。例如,不要定义只标记枚举末尾的枚举常量。如果需要确定枚举的最后一个值,请显式检查该值。此外,如果枚举常量范围中的所有值都有效,还可以对第一个和最后一个枚举常量执行范围检查。
-
不要指定保留供以后使用的枚举常量。
-
在定义采用枚举常量作为值的方法或属性时,应考虑对该值进行验证。原因是即使数值未在枚举中定义,也可以将数值强制转换为枚举类型。
class Example{ // Define an Enum without FlagsAttribute. enum SingleHue : short { Black = 0, Red = 1, Green = 2, Blue = 4 }; // Define an Enum with FlagsAttribute. [FlagsAttribute] enum MultiHue : short { Black = 0, Red = 1, Green = 2, Blue = 4 }; public static void Demo(System.Windows.Controls.TextBlock outputBlock) { outputBlock.Text += "This example of the FlagsAttribute attribute /n" + "generates the following output." + "/n"; outputBlock.Text += "/nAll possible combinations of values of an /n" + "Enum without FlagsAttribute:/n" + "/n"; // Display all possible combinations of values. for (int val = 0; val <= 8; val++) outputBlock.Text += String.Format("{0,3} - {1}", val, ((SingleHue)val).ToString()) + "/n"; outputBlock.Text += String.Format( "/nAll possible combinations of values of an /n" + "Enum with FlagsAttribute:/n") + "/n"; // Display all possible combinations of values. // Also display an invalid value. for (int val = 0; val <= 8; val++) outputBlock.Text += String.Format("{0,3} - {1}", val, ((MultiHue)val).ToString()) + "/n"; }}/* This example of the FlagsAttribute attribute generates the following output. All possible combinations of values of an Enum without FlagsAttribute: 0 - Black 1 - Red 2 - Green 3 - 3 4 - Blue 5 - 5 6 - 6 7 - 7 8 - 8 All possible combinations of values of an Enum with FlagsAttribute: 0 - Black 1 - Red 2 - Green 3 - Red, Green 4 - Blue 5 - Red, Blue 6 - Green, Blue 7 - Red, Green, Blue 8 - 8 */
- FlagsAttribute
- 学习枚举类型/FlagsAttribute属性
- FlagsAttribute属性在enum中的应用
- FlagsAttribute属性在enum中的应用
- enum类的FlagsAttribute(或Flags)用法
- FlagsAttribute属性在enum中的应用{转载}
- C#中FlagsAttribute属性在enum中的应用
- 纠结于VMWARE WORKSTATIONz中
- 充实
- 完数
- 约束
- linux下安装php make install时出现错误 解决
- FlagsAttribute
- 牛顿迭代法
- 二分法
- 菱型*阵
- PostedFile.ContentType所有格式
- Java数据类型
- 英语学习
- 新手
- 背诵××能提高××能力吗?