代码之家  ›  专栏  ›  技术社区  ›  Kamarey

明确设置枚举字段值的利弊

  •  10
  • Kamarey  · 技术社区  · 15 年前

    显式设置枚举的字段而不是仅定义它们的名称是否更可取? 例如,Enum1与Enum2有何利弊?

    列举1:

    enum SomeEnum
    {
       Something1 = 0,
       Something2 = 1
    }
    

    列举2:

    enum SomeEnum
    {
       Something1,
       Something2
    }
    

    编辑:

    10 回复  |  直到 14 年前
        1
  •  13
  •   Randolpho    15 年前

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

    [Flags] 枚举;它们必须是2次方的值。

    通常,我不喜欢声明显式值,除非值本身出于某种原因是重要的——例如,如果您的C#枚举是包装C枚举的话。

        2
  •  7
  •   Max    15 年前

    当需要负值时,它很有用

    enum
    {
      Error = -1,
      Success = 0,
      Something1, 
      Something2,
    };
    
        3
  •  6
  •   Robert Harvey    15 年前

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

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

    此外,显式地设置数字更容易读取,并且在中间添加值不会改变任何其他值。

        4
  •  3
  •   TLiebe    15 年前

    如果值在程序之外具有某种意义,则显式设置这些值非常有用。例如,应用程序可能会编写一个日志文件,该日志文件使用的严重性值可用于以后筛选日志文件。在枚举中显式设置值意味着您可以在代码中使用枚举(例如,严重、错误、警告)而不是数值。在日志文件中,您希望写入数值以便于排序。

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

        5
  •  2
  •   BIDeveloper    15 年前

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

    对于所有其他选项,不要使用数字。这样,您就可以很高兴地向枚举中添加其他项,而无需中断任何其他可能引用您的枚举的代码。

        6
  •  1
  •   Phillip Ngan    15 年前

    在web服务接口上使用不包含值0的枚举时,序列化这些枚举时遇到问题。

        7
  •  1
  •   Muad'Dib    15 年前

    这取决于您对枚举所做的操作。如果将它们与[Flags]一起使用,则必须显式设置它们。如果您不是,那么从编码的角度来看,任何一种方法都是有效的。但是,为了可读性或(如上所述)在数据库中使用,您应该显式地设置它们。另一个考虑因素是工作场所的编码标准,以及序列化。

        9
  •  1
  •   Tim Allman    15 年前

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

    重要值的一个示例是为位标志创建值,可设置如下:

    > enum 
    {
        flag1 = 1;
        flag2 = 2;
        flag3 = 4;
    };
    
    func1(flag1 | flag3);
    
        10
  •  0
  •   user74754 user74754    12 年前

    哪些尚未设置 从枚举值 . 这可能是为枚举值显式分配整数值的一个很好的参数,起始整数不是零。当然,除非您将第一个值设置为“NotAssigned”或类似的值。