枚举和常量。 哪个使用时?

我正在读取枚举,并发现它们非常类似于声明常量。 我怎么知道什么时候使用常量而不是枚举,反之亦然。 使用枚举有什么好处?

当你想要定义一些可能的值时使用枚举。 颜色是一个明显的例子,如:

public enum Colour { White, Red, Blue } 

或者可能是一组可能的事情:(例如,我偷了,因为我很懒)

 [FlagsAttribute] enum DistributedChannel { None = 0, Transacted = 1, Queued = 2, Encrypted = 4, Persisted = 16, FaultTolerant = Transacted | Queued | Persisted } 

常量应该是一个单一的值,比如PI。 没有一个PI值的范围,只有PI。

其他答案中缺less的是枚举有一个整数基types。 您可以将默认值从int更改为除char之外的其他整数types,如:

 enum LongEnum : long { foo, bar, } 

您可以显式地从隐式转换到基本types,这在switch语句中很有用。 请注意,即使枚举没有适当的值,也可以将任何基types的值转换为枚举值。 所以总是使用交换机的默认部分是一个好主意。 顺便说一句,.NET本身甚至允许浮点值的枚举,但是你不能在C#中定义它们,尽pipe我认为你仍然可以使用它们(除了在开关中)。

此外,使用枚举给你更多的types安全。 如果你打算使用例如int常量作为方法参数,那么我可以调用任何int值的方法。 当然,通过铸造它也可以和枚举一起发生,但它不会意外发生。 更糟的是可能会混淆参数的顺序。

 void method(int a, int b) {...} 

如果常量A只能进入a而常量B只能进入b,那么使用两种不同的枚举types将在编译过程中发现任何滥用。

常量是一个语言特征,它说variables不会改变值(所以编译器可以对这个知识进行优化),而枚举是一个特定的types。

常量可以是任何数据types,但枚举是一个枚举。

我使用枚举的任何地方,你可以有多个选项,并希望提高代码的可读性。 也就是说,您可以将跟踪级别作为值为0,1,2的int或作为错误,警告和信息的枚举。

枚举也可以用作按位运算符,即FontStyle.Bold | FontStyle.Italic会给你粗体和斜体的字体。

除了罗伯特的回答:

  1. 使用枚举有限的一组命名值。 你并不关心每个符号背后的数值(但是你仍然有能力施加这些数值,例如为了与遗留系统兼容)。

  2. 罗伯特:是的,Enum可以用作位域。 使用Flags属性(并确保枚举的成员具有合适的数值)。

AC#常量类似于一个variables,因为它给一个值定义了一个名字。 但是,常数与标准variables不同,因为一旦定义,赋值给常量的值永远不会改变。 常量的主要好处是它们可以帮助创build自我logging代码,并允许在一个地方声明关键值,如果需要更新值并重新编译软件,便于维护。

而枚举器列表可用于定义序列和状态,特别是当通过这些状态进行自然进展时。 这是因为列表中的每个常量都可以使用其名称或值进行格式化和比较。 枚举也可以用来定义有限的一组有效值。