正确命名C#的枚举值

时间:2008-10-07 20:29:30

标签: c# enums naming

你怎么看,拥有这样一个枚举是个好主意:

enum AvailableSpace {
   Percent10,
   Percent20,
   SqF500,
   SqF600
}

问题是关于值名称的语义,即百分比和平方英尺。我真的相信这不是一个好主意,但我无法找到和指导等等。

编辑:这将用于确定实体的状态 - 即作为描述对象状态的只读属性。如果我们知道总空间(即对象本身知道它),我们可以选择在内部进行转换,因此我们要么只有百分比,要么是平方英尺,要么两者都有。争论的焦点是,“两者”都不是一个好主意。

以上是一个例子当然,但真正的问题是一些数据提供者向我们发送总数(sq.f.)和其他百分比,我的目标是统一用户界面。我可以自由地进行一些近似,因此将根据我们想要提供信息的准确度来调整确切的值。

问题只是关于值名称的语义,而不是内容 - 即,如果将百分比放入(潜在的)int枚举中是个好主意。

2 个答案:

答案 0 :(得分:8)

答案:不,使用枚举代表值不是一个好主意。特别是在两个语义上不同的尺度中的值。您不应该使用枚举值。

原因:两个音阶的枚举值之间的关系是什么,比如Percent10和SqF600?如何扩展代码中可以表示的值列表?你如何对这些值进行比较和算术运算?

这个建议(没有被要求,但在这里它是。: - )):你想要做的语义将更好地反映在包含两个字段的结构中 - 一个绝对面积和一个绝对面积百分比。通过这种结构,您可以使用上面的枚举表示您可以表示的任何内容。例如,为您提供绝对区域的数据提供程序使用区域和100%可用的结构表示。给出百分比的数据提供者用结构表示它们设置的百分比和绝对区域,使得该区域的百分比是数据提供者想要报告的实际可用区域。您可以从两种类型的提供程序中获得数据的“规范化”表示,并且可以添加几个运算符以启用与实例的比较和算术计算。

答案 1 :(得分:5)

如果可能的话,我宁愿将你的例子分成两个值,你的枚举是“Percent”和“SquareFeet”,第二个值是量词。将这些结合在一个结构中。

如果上下文允许,可能更好的是创建两个包装类型“Percent”和“SquareFeet”,然后创建一些运算符重载,这样你就可以做一些事情,比如“new SquareFeet(500)+ new Percent”( 20);”并消除使用枚举。

更新:如果值是行业认可的术语,那么您的命名方案将是合适的,几乎达到符号的程度。例如,使用包含诸如“ISO9001”之类的值的枚举而不是两个值(包含“ISO”的枚举和9001的int)是安全的。如下所示有一个枚举也是合适的:

public enum OperatingSystem
{
    Windows95,
    Windows98,
    Windows2000,
    WindowsXP,
    WindowsVista,
    MacOSClassic,
    MacOSXTiger,
    MacOSXLeopard
}

如果术语“Percentage10”和“Sqf500”不是艺术术语或在规范,数据字典等中明确定义,那么将它们用作枚举中的值是不合适的。