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)或其名称(添加,编辑)和内存分配方案进行比较?
答案 0 :(得分:6)
默认情况下,枚举基于Int32类型(尽管它们可以与其他原始数字类型一起使用),因此正在对整数值进行比较。
就值的内存表示而言,它应该与标准Int32值相同。
答案 1 :(得分:4)
枚举实际上只是整数 - (通常是int
) - 并且完全相同。如果你有:
enum Mwahaha {
Evil = 1, Nasty = 1
}
然后你会发现Mwahaha.Evil == Mwahaha.Nasty
。名字的唯一重要时刻是:
Enum.Parse
(等)时ToString()
等显示时(我怀疑未定义上面是否显示Evil
或Nasty
)答案 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#中,您使用枚举有两个目的:
如果你只需要满足part(2),你就可以使用常量。枚举的存储类型默认为Int32。这意味着==运算符比较整数。您可以通过显式指定基类型来控制枚举的基类型(例如Int64或byte)。