带常量的结构:
public struct UserType
{
public const int Admin=1;
public const int Browser=2;
public const int Operator=3;
}
Run Code Online (Sandbox Code Playgroud)
现在让我们使用枚举来达到同样的目的:
public enum UserType
{
Admin=1,
Browser,
Operator
}
Run Code Online (Sandbox Code Playgroud)
两者都在堆栈上分配.在这两种情况下,我都会说UserType.Admin.使用struct方法,我不必转换为int来获取底层值.我知道使用枚举版本可以保证三个值中只有一个将被使用,而对于struct版本,任何整数都可以used,表示Int32.MinValue和Int32.MaxValue之间的任何值.除了这个之外,还有其他好处吗?
Jon*_*eet 37
除了这个之外,还有其他好处吗?
明晰.
假设您有一个字段或方法参数,它始终具有这三个值中的一个.如果你把它作为枚举类型,那么:
int值转换为枚举类型,但您必须明确地这样做.)这些在编写代码时非常重要,将来很容易维护.您可以越多地使代码自然地描述您想要实现的目标,就越好.
Mic*_*tum 10
可以从没有反射的字符串或数字中查找枚举,例如
// VERY important when using ORMs, as databases usually use an int
UserType ut = (UserType)2;
// Useful when parsing config files like appSettings.
UserType utf = (UserType)Enum.Parse(typeof(UserType),"Admin");
Run Code Online (Sandbox Code Playgroud)
框架中还有很多内容可以让Enums更快地进行常见操作.另一件事是FlagsAttribute for Bitfields,使用const int不容易实现.
检查Enum类的成员以获取更多帮助函数,例如GetNames和GetValues.