枚举有什么意义?

时间:2011-11-04 14:11:33

标签: c# c++

当你必须将它们转换为整数时,枚举被用于像switch语句这样的东西有什么意义?

使用一些常量int不是更好吗?我想使用枚举,但演员使他们看起来很笨重。我以为它们本来就是彗星,但它们还是别的什么?

它们在C ++中是否具有相同的行为?

抱歉这个措辞严厉的问题,我的脑子已经油腻了。

10 个答案:

答案 0 :(得分:13)

枚举的全部内容是让您的代码更具可读性。它们不会被整合,因为它们是默认的整数。唯一的区别是,不是来回检查您可能拥有的int值,而是可以使用一组清晰的枚举来使代码更具可读性。

答案 1 :(得分:5)

枚举具有语义值,可帮助您更轻松地阅读代码。它们比仅使用常量值更有用,因为您可以将它们组合在一起。

将枚举视为命名一组相关常量值的方法。

答案 2 :(得分:3)

使用Enum的主要好处是代码可读性。他们将一组逻辑值组合成人类可以(通常)比许多数字或const声明更快地理解的东西,分散在整个源文件中。

在处理诸如位Flags和相关二进制操作之类的事情时,它们提供了很多价值。

答案 3 :(得分:2)

在C ++和C#

中打开枚举是完全合法的

答案 4 :(得分:1)

枚举主要用于可读性和易于理解。在使用Facade设计模式时,它们非常有用。

答案 5 :(得分:1)

在C ++中,不需要转换为int,因此您可以进行以下编译并运行良好:

enum e{
   V1 = 0,
   V2,
   V3
};

int main()
{
   e x = V1;
   switch (x)
   {
   case V1:
      break;
   case V2:
      break;
   case V3:
      break;
   }
   return 0;
}

答案 6 :(得分:1)

在C#中,不需要强制转换为int。您可以使用:

switch (myEnumValue)
{
    case MyEnum.ValueOne:

        // Do stuff
        break;

    case MyEnum.ValueTwo:

        // Do stuff
        break;

    default:

        // Do stuff
        break;
}

答案 7 :(得分:0)

除了可读性之外,您还可以获得增强的类型安全性(至少在C#中)。

在C#中,如果函数采用枚举,则无法将其传递给枚举范围之外的值。

答案 8 :(得分:0)

上述类型安全性和可读性优势带来了其他一些好处。

使用某些开发IDE(Visual Studio和其他)时,您可以在使用枚举时获得智能感知。例如,如果您使用枚举作为case语句的switch值,则在声明每个case时都会获得intellisense。

可维护性 - 您可以获得一个位置来更改与枚举成员对应的整数值。

答案 9 :(得分:0)

枚举的全部意义在于它们不是整数(尽管在C ++中它们可以隐式转换为整数;我不知道C#)。这为您提供额外的类型安全性。例如,用C ++说,你有:

enum open_type { open_read, open_write, open_readwrite, open_create };
enum exclusivity { exclusive, shared };
void open_file(char const* filename, opentype ot, exclusivity ex);

然后以下将给出编译错误:

open_file("foo.txt", exclusive, open_write);

如果open_file只使用了in而不是enums,那么这个错误就不会被捕获。