关于我所碰到的问题中的[枚举]
来源:互联网 发布:linux配置dns解析域名 编辑:程序博客网 时间:2024/04/29 03:33
枚举是一个指定的常数,其基础类型可以是除 Char 外的任何整型。如果没有显式声明基础类型,则使用 Int32。编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举。
Enum 提供比较此类的实例的方法、将实例的值转换为其字符串表示形式的方法、将数字的字符串表示形式转换为此类的实例的方法和创建指定枚举和值的实例的方法。
也可以将枚举视为位域。有关更多信息,请参见 FlagsAttribute。
实现的接口
此类从 ValueType 继承,并实现 IComparable、IFormattable 和 IConvertible 接口。使用 Convert 类来进行转换,而不使用此类的 IConvertible 的显式接口成员实现。
用于 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 枚举常量仍十分有用。原因是在默认情况下,公共语言运行库会将用于枚举的内存初始化为零。因此,如果不定义值为零的常量,则枚举在创建时将包含非法值。
如果明显存在应用程序需要表示的默认情况,请考虑使用值为零的枚举常量表示默认值。如果不存在默认情况,请考虑使用值为零的枚举常量(这意味着该情况不由任何其他枚举常量表示)。
不要定义只映射枚举本身状态的枚举值。例如,不要定义只标记枚举末尾的枚举常量。如果需要确定枚举的最后一个值,请显式检查该值。此外,如果枚举常量范围中的所有值都有效,还可以对第一个和最后一个枚举常量执行范围检查。
不要指定保留供以后使用的枚举常量。
在定义采用枚举常量作为值的方法或属性时,应考虑对该值进行验证。原因是即使数值未在枚举中定义,也可以将数值强制转换为枚举类型。
C# |
using System;public class EnumTest { enum Days { Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday }; enum BoilingPoints { Celcius = 100, Fahrenheit = 212 }; [FlagsAttribute] enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 }; public static void Main() { Type weekdays = typeof(Days); Type boiling = typeof(BoilingPoints); Console.WriteLine("The days of the week, and their corresponding values in the Days Enum are:"); foreach ( string s in Enum.GetNames(weekdays) ) Console.WriteLine( "{0,-11}= {1}", s, Enum.Format( weekdays, Enum.Parse(weekdays, s), "d")); Console.WriteLine(); Console.WriteLine("Enums can also be created which have values that represent some meaningful amount."); Console.WriteLine("The BoilingPoints Enum defines the following items, and corresponding values:"); foreach ( string s in Enum.GetNames(boiling) ) Console.WriteLine( "{0,-11}= {1}", s, Enum.Format(boiling, Enum.Parse(boiling, s), "d")); Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow; Console.WriteLine(); Console.WriteLine("myColors holds a combination of colors. Namely: {0}", myColors); }} 在这里提供给大家我的错误 Public Enum TypeEnum{C#,Java,...} 其中C#处,出错! |
- 关于我所碰到的问题中的[枚举]
- 我碰到关于蓝牙的技术问题
- 我在修改leftButtonButtonItem所碰到的一些小问题
- VSS2005配置所碰到的问题
- 面试经历记录所碰到的问题
- 着手实验所碰到的Matlab问题
- matlab非线性拟合所碰到的问题
- 我碰到的问题呀!!!
- 关于定位时,getLastKnownLocation返回值为null所碰到的问题
- 关于HDU1000的几个我所了解到的问题
- 关于go的gui-->walk的使用及我碰到的问题
- 我碰到过的面试问题
- 我碰到Cookie的一个问题
- 我碰到的Java heap space问题
- 网页标准在实践中所碰到的小问题
- evc4工程移植vs.net2005所碰到的问题积累
- evc4工程移植vs2005所碰到的问题积累
- evc4工程移植vs.net2005所碰到的问题积累
- 各种数据库的连接方式
- Ajax校验text框内的内容(登录验证)
- IT中毒者应有的全副装备
- 使用Sitemesh框架
- 可以ping 通IP地址但ping不通网址的解决方法
- 关于我所碰到的问题中的[枚举]
- 在SDK中取得设备内容句柄的五种方法
- 职业发展?
- 深入了解:液晶显示器的工作原理 3
- 2009工程计算国际会议(ICEC2009)
- 纯CSS+DIV实现圆角的三种方法
- PHP-Javascript“返回上一页”无缓存问题
- 一个 SPI 转串口驱动的优化
- 简单试试