如何在.NET中使用枚举

时间:2009-11-25 12:32:41

标签: .net vb.net

enum如何在.NET中运行? 例如

Enum eOpenMode
    Add = 1
    Edit = 2
End Enum

If LOpenMode = eOpenMode.Add Then
    rdoAddProject.Checked = True
ElseIf LOpenMode = eOpenMode.Edit Then
    rdoEditProject.Checked = True

如何通过它们的值(1,2)或其名称(添加,编辑)和内存分配方案进行比较?

4 个答案:

答案 0 :(得分:6)

默认情况下,枚举基于Int32类型(尽管它们可以与其他原始数字类型一起使用),因此正在对整数值进行比较。

就值的内存表示而言,它应该与标准Int32值相同。

答案 1 :(得分:4)

枚举实际上只是整数 - (通常是int) - 并且完全相同。如果你有:

enum Mwahaha {
    Evil = 1, Nasty = 1
}

然后你会发现Mwahaha.Evil == Mwahaha.Nasty。名字的唯一重要时刻是:

    您的代码中的
  • 使用Enum.Parse(等)时
  • 通过ToString()等显示时(我怀疑未定义上面是否显示EvilNasty
  • 使用xml序列化之类的东西(类似于上面的内容)

答案 2 :(得分:3)

枚举本质上是原始数字类型的薄层(默认情况下为Int32)。在内部,它们的处理方式与数值完全相同,可以很容易地将它们转换为基础类型。

因此,值得注意的是,在处理Enums时,你必须小心处理你传递的值。

Enum eOpenMode
    Add = 1
    Edit = 2
End Enum

Dim myEnumVal as eOpenMode
myEnumVal = Cast(100, eOpenMode)

此代码编译并运行正常,myEnumVal将包含值100,该值不会映射到已知的枚举值。因此,将此值传递给期望eOpenMode参数的方法是合法的,即使它不是枚举值之一。

请确保使用Switch语句检查枚举值,如果枚举中未定义提供的值,则抛出ArgumentOutOfRangeException

除此之外,因为枚举由数字类型支持,所以它们也可以用作位掩码以允许组合值:

<Flags>
Enum eOpenMode
    Add = 1  
    Edit = 2 
    AddEdit = Add OR Edit
End Enum

答案 3 :(得分:1)

在C#中,您使用枚举有两个目的:

  1. 约束可用值集
  2. 为这些值提供有用的名称
  3. 如果你只需要满足part(2),你就可以使用常量。枚举的存储类型默认为Int32。这意味着==运算符比较整数。您可以通过显式指定基类型来控制枚举的基类型(例如Int64或byte)。