34

带有常量的结构:

public struct UserType
{
  public const int Admin=1;
  public const int Browser=2;
  public const int Operator=3;
}

现在让我们为同样的目的使用一个枚举:

public enum UserType
{
  Admin=1,
  Browser,
  Operator
}  

两者都分配在堆栈上。在这两种情况下,我都会说 UserType.Admin。使用 struct 方式,我不必强制转换为 int 来获取基础值。我知道使用 enum 版本可以保证使用三个值中的一个且只有一个,而使用 struct 版本可以是任何整数used,表示 Int32.MinValue 和 Int32.MaxValue 之间的任何值。除了这个之外,更喜欢枚举还有其他好处吗?

4

2 回答 2

37

除了这个之外,更喜欢枚举还有其他好处吗?

明晰。

假设您有一个始终具有这三个值之一的字段或方法参数。如果将其设为枚举类型,则:

  • 您不能意外地为其分配一些任意整数值。(您可以故意将任何int值强制转换为枚举类型,但您必须明确地这样做。)
  • 很清楚该值代表什么样的信息

这些对于编写将来易于维护的代码来说是非常重要的好处。你越能让你的代码自然地描述你想要达到的目标越好。

于 2012-11-17T09:05:31.607 回答
9

枚举可以在没有反射的情况下从字符串或数字中查找,例如

// 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");

框架中还有很多东西可以让 Enums 的常见操作更快。另一件事是位域的FlagsAttribute,这对于 const int 来说是不容易实现的。

检查Enum 类的成员以获得更多帮助函数,例如 GetNames 和 GetValues。

于 2012-11-17T09:08:26.567 回答