enum 使用规范及技巧(C# 参考)

ENUM关键字

  • enum 关键字用于声明枚举,一种包含一组被称为枚举数列表的已命名常数的不同类型。
  • 通常最好是直接在命名空间内定义枚举,以便命名空间中的所有类都可以同样方便地访问它。 但是,也可能会在类或结构中嵌套枚举。
  • 默认情况下,第一个枚举数具有值 0,并且每个连续枚举数的值将增加 1。 例如,在以下枚举中, Sat 的值为 0Sun 的值为 1Mon 的值为 2,依次类推。
enum Day {Sat, Sun, Mon, Tue, Wed, Thu, Fri};// Sat 的值为 0, Sun 的值为 1, Mon 的值为 2,依次类推。
enum Day {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};//在此枚举中,强制元素的序列从 1 开始,而不是 0。 但建议包括一个值为 0 的常量。
  • 每个枚举类型都有一个基础类型,该基础类型可以是除 char 外的任何整型类型。 枚举元素的默认基础类型是 int。若要声明另一整型的枚举(如 byte),则请在后跟该类型的标识符后使用冒号,如以下示例所示。
enum Day : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
  • 已批准的枚举类型有 bytesbyteshortushortintuint, long ulong
  • 枚举类型的变量可在基本类型范围内分配到任何值;这些值不限于已命名常数。
  • enum E 的默认值是由表达式 (E)0生成的值。
  • 备注:枚举数名称中不能含有空格。

  • 基础类型指定为每个枚举数分配多少存储空间。 但要将 enum 类型转换为整型,则必须使用显示转换。 例如,以下语句通过使用转换将 Sun 转换为 ,从而将枚举数 赋值为 enum int int类型的变量。

int x = (int)Day.Sun;

可靠编程

  • 正如任何常量一样,对枚举的各项值的所有引用在编译时都会转换为数字参数。 这可能会造成如常量中所述的潜在版本问题。
  • 将其他值分配到枚举的新版本,或者在新版本中更改枚举成员的值,会导致出现相关源代码问题。 通常在 switch 语句中使用枚举值。 如果已将其他元素添加到 enum 类型,则 switch 语句的默认部分可被意外地选中。
  • 如果其他开发人员使用你的代码,则在将新元素添加到任何 enum 类型时应提供有关他们的代码应该如何响应的准则。

示例

  • 在下面的示例中,已声明枚举 Day。 已将两个枚举数显式转换为整数,并赋值为整数变量。
public class EnumTest
{
    enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat };

    static void Main()
    {
        int x = (int)Day.Sun;
        int y = (int)Day.Fri;
        Console.WriteLine("Sun = {0}", x);
        Console.WriteLine("Fri = {0}", y);
    }
}
/* Output:
   Sun = 0
   Fri = 5
*/
  • 以下示例中,使用基类型选项来声明其成员是 enum 类型的 long。 请注意,即使该枚举的基础类型是 long,仍然需通过使用转换将枚举成员显式转换为类型 long
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
*/
// 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
*/

 ----摘自:C# 语言规范

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值