enum{}

来源:互联网 发布:cf窗口化软件 编辑:程序博客网 时间:2024/04/29 00:43

 

enum

enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型。

通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它。但是,还可以将枚举嵌套在类或结构中。

默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。例如,下面的枚举,Sat0Sun1Mon2 等.

复制
enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

如下面的示例所示枚举数可用初始值来重写默认值。

复制
enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

在此枚举中,强制元素序列从1 而不是0 开始。 但是,一般建议包括值为 0 的常量。 有关更多信息,请参见 枚举类型(C# 编程指南)

每种枚举类型都有基础类型,该类型可以是除char 以外的任何整型。枚举元素的默认基础类型为int。 要声明另一整型枚举(如 byte),请在标识符之后紧跟类型,然后再使用冒号,如下面的示例所示。

复制
enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

准许使用的枚举类型有 byte、sbyte、short、ushort、int、uint、long 或 ulong。

可以给 Days 类型的变量赋以基础类型范围内的任何值,所赋的值不限于已命名的常数。

enum E 的默认值为表达式(E)0 生成的值。

注意注意

枚举数的名称中不能包含空白。

基础类型指定为每个枚举数分配的存储大小。但是,从enum 类型到整型的转换需要用显式类型转换来完成。例如,下面的语句使用强制转换(从enum 转换为int)将枚举数Sun 赋值给一个int 类型的变量。

复制
int x = (int)Days.Sun;

System.FlagsAttribute 应用于某个枚举时,如果该枚举包含一些使用按位OR 运算组合的元素,该特性在用于某些工具时会影响 enum 的行为。当使用诸如Console 类方法、表达式计算器这样的工具时,可以注意到这些变化。(请参见第三个示例。)

可靠编程

与任何常量一样,对枚举中各个值的所有引用在编译时均将转换为数值文本。这可形成潜在的版本控制问题,如常量(C# 编程指南)中所述。

给新版本的枚举赋其他值,或者更改新版本中枚举成员的值,可导致相关源代码出现问题。通常在switch 语句中使用枚举值。如果 enum 类型中添加了其他元素,则 switch 语句的默认节可能被意外选定。

如果其他开发人员使用您的代码,则需要提供相关说明,告诉开发人员如果任何enum 类型中添加了新元素,他们的代码应该如何响应。

示例

在下面的示例中,将声明枚举Days两个枚举数被显式转换为整数并赋给整型变量。

C#
复制
 
在下面例中
public class EnumTest{    enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };    static void Main()    {        int x = (int)Days.Sun;        int y = (int)Days.Fri;        Console.WriteLine("Sun = {0}", x);        Console.WriteLine("Fri = {0}", y);    }}/* Output:   Sun = 0   Fri = 5*/

,使用了基类选项来声明long 类型的 enum 成员。请注意,即使枚举的基础类型是long,也仍然必须使用强制转换将枚举成员显式转换为 long 类型。
C#
复制
public class EnumTest2{    enum Range : long { Max = 2147483648L, Min = 255L };    static void Main()    {        long x = (long)Range.Max;        long y = (long)Range.Min;        Console.WriteLine("Max = {0}", x);        Console.WriteLine("Min = {0}", y);    }}/* Output:   Max = 2147483648   Min = 255*/

下面的代码示例阐释 enum 声明上的System.FlagsAttribute 特性的使用和效果。
C#
复制
// Add the attribute Flags or FlagsAttribute.[Flags]public enum CarOptions{    // The flag for SunRoof is 0001.    SunRoof = 0x01,    // The flag for Spoiler is 0010.    Spoiler = 0x02,    // The flag for FogLights is 0100.    FogLights = 0x04,    // The flag for TintedWindows is 1000.    TintedWindows = 0x08,}class FlagTest{    static void Main()    {        // The bitwise OR of 0001 and 0100 is 0101.        CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;        // Because the Flags attribute is specified, Console.WriteLine displays        // the name of each enum element that corresponds to a flag that has        // the value 1 in variable options.        Console.WriteLine(options);        // The integer value of 0101 is 5.        Console.WriteLine((int)options);    }}/* Output:   SunRoof, FogLights   5*/

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝发高烧怎么办能快速退烧 屁股上长了纹路怎么办 手机充电头歪了怎么办 屁股挠烂了化脓怎么办 手机充电那坏了怎么办 孩子在学校被老师冤枉怎么办 初中学校不好我该怎么办 天气太热屁股淹了怎么办 骑车骑的屁股疼怎么办 爬山时屁股摔紫青了怎么办 宝宝不肯脱裤子拉粑粑怎么办 国家对无地农民怎么办 生完孩子骨架变大怎么办 17岁长高很慢怎么办? 出月子腿着凉了怎么办 脚着凉了脚疼怎么办 腿着凉了特别疼怎么办 孩子骨龄大2两年怎么办 和人吃饭很尴尬怎么办 头不自觉向右偏怎么办 靠墙站立腰疼怎么办 小腿酸痛乏力肌肉萎缩怎么办 搬重物后手臂疼怎么办 和尚鹦鹉吃了盐怎么办 刚买鹦鹉不上手怎么办 word的文件时间改了怎么办 图强gps编码丢失怎么办 武统台湾后岛民怎么办 没有你我怎么办是什么歌 ios 12软件闪退怎么办 来大姨妈想吐怎么办 3岁宝宝体重轻怎么办 硕士延期毕业考上博士怎么办 中国人移民欧洲饮食不习惯怎么办 出车祸了报警警察不管怎么办 高中的孩子不好好上学怎么办 和老公消费观念不合拍怎么办 去医院没带现金怎么办 微信读书下架了怎么办 24岁血压有点高怎么办 吃鸡鼠标弹出来怎么办