5

会不会有速度上的差异

if (myInt == CONST_STATE1)

if (myEnum == myENUM.State1)

在 C# 中?

4

3 回答 3

11

在 C# 中,枚举无论如何都被编译器内联为常量,因此好处是代码易读性

于 2009-01-02T12:47:05.090 回答
2

使用 Enums 时要注意的是不要使用任何需要反射的操作(或小心使用它们)。例如:

  1. myEnumValue.ToString()。
  2. 枚举.Parse()
  3. 枚举.IsDefined()
  4. 枚举.GetName()
  5. 枚举.GetNames()

如果是常量,则不存在执行任何需要反射的操作的选项。但是,在枚举的情况下它确实如此。所以你必须小心这个。

我看过配置文件报告,其中与枚举验证/反射相关的操作占用了高达 5% 的 CPU 时间(在每次调用 API 方法时都进行枚举验证的场景)。这可以通过编写一个缓存正在使用的枚举类型的反射结果的类来大大减少。

话虽如此,我还是建议根据从设计的角度来看有意义的事情来决定使用枚举还是常量。这是在确保团队了解涉及反射的操作的性能影响的同时。

于 2009-01-03T11:04:47.777 回答
1

另外,我不确定您是否需要担心这一点。这听起来确实像过早的优化。我敢肯定,在任何系统中,都存在比枚举比较更大的瓶颈。:)

于 2009-01-03T10:42:03.407 回答