优点和缺点明确设置枚举字段的值

时间:2009-11-05 15:28:23

标签: .net theory

是否最好明确设置枚举字段而不是仅定义其名称? 例如。 Enum1与Enum2的任何利弊?

Enum1:

enum SomeEnum
{
   Something1 = 0,
   Something2 = 1
}

Enum2:

enum SomeEnum
{
   Something1,
   Something2
}

P.S。此问题与存储在数据库中的枚举无关,需要明确设置值。

编辑: 假设所有值都是0,1等......它们不是负数或其他东西。

10 个答案:

答案 0 :(得分:11)

Enum1和Enum2编译为相同的枚举。因此从编程的角度来看,没有区别。从维护的角度来看,可能存在问题,也可能没有问题。

一方面,[Flags]枚举绝对需要声明显式值;并且它们需要是2的幂值。

另一方面,显式值可以通过创建将来不能或不应该更改的值来降低可维护性。

通常,我更喜欢不声明显式值,除非由于某些原因值本身很重要 - 例如,如果您的C#枚举是包装C枚举。

答案 1 :(得分:7)

当你需要负值

时它很有用
enum
{
  Error = -1,
  Success = 0,
  Something1, 
  Something2,
};

答案 2 :(得分:5)

如果您需要不连续的值,则可以使用Enum1。

enum Colors 
{ 
    Red = 1, 
    Green = 2, 
    Blue = 4, 
    Yellow = 8 
};

此外,明确设置数字更容易阅读,在中间添加值不会改变任何其他值。

答案 3 :(得分:3)

如果在程序之外有一些含义,则显式设置值很有用。例如,应用程序可能会编写一个使用Severity值的日志文件,以后可以使用该值来过滤日志文件。在Enum中显式设置值意味着您可以在代码中使用Enum(例如,严重,错误,警告)而不是数值。在日志文件中,您需要编写数值以便于排序。

我还看到用于表示数据库引用表中的值的枚举。在这种情况下,您希望确保枚举中的项始终与数据库表具有相同的值,并且在枚举的中间插入新项不会弄乱值。

答案 4 :(得分:2)

如果您确实需要数字,请使用示例1(即您需要知道某事物2实际上等于2)

对于所有其他选项,请勿使用数字。这样,您可以愉快地在枚举中添加其他项目,而不会破坏任何其他代码,可能会引用您的枚举。

答案 5 :(得分:1)

在通过Web服务接口使用时,我遇到了序列化不包含值0的枚举的问题。

答案 6 :(得分:1)

这取决于你对枚举的所作所为。如果你在[Flags]中使用它们,那么你必须明确地设置它们。如果你不是,那么从编码的角度来看,无论哪种方式都有效。但是,为了便于阅读或(如上所述)在数据库情况下使用,您应该明确设置它们。另一个考虑因素是工作场所的编码标准,以及序列化。

答案 7 :(得分:1)

当您需要使用已标记的枚举时,还需要使用枚举1:http://weblogs.asp.net/wim/archive/2004/04/07/109095.aspx

答案 8 :(得分:1)

如果您只想要一组类似于int的常量,其值不重要,请使用默认值。如果值很重要,那么设置它们。

重要的值的一个例子是为位标志创建值,可以这样设置:

> enum 
{
    flag1 = 1;
    flag2 = 2;
    flag3 = 4;
};

func1(flag1 | flag3);

答案 9 :(得分:0)

如果没有设置它们的值,请考虑整数支持的枚举将具有默认值default(int)(或零),因此当使用隐式编号的枚举时,可能难以区分枚举值 尚未设置 来自枚举值 ,故意将其设置为第一个选项 。这可能是一个很好的参数,用于明确地将整数值分配给枚举值,并使用非零的起始整数。除非您将第一个值设为“NotAssigned”或其他类似值。