3

您如何看待,拥有这样一个枚举是否是个好主意:

enum AvailableSpace {
   Percent10,
   Percent20,
   SqF500,
   SqF600
}

问题是关于值名称的语义,即百分比和平方英尺。我真的认为这不是一个好主意,但我找不到支持这一点的指南等。

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

上面当然是一个例子,但真正的问题是一些数据提供者向我们发送了总数(sq.f.)和其他百分比,而我的目标是统一 UI。我可以随意做出一些近似值,因此将根据我们想要呈现信息的准确程度来调整确切的值。

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

4

2 回答 2

8

答案:不,使用枚举来表示值不是一个好主意。尤其是两个语义不同的尺度中的值。您不应该将枚举用于值。

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

该建议(未要求,但仍然存在。:-)):您尝试做的事情的语义将通过包含两个字段的结构更好地反映 - 一个用于绝对区域,一个用于该绝对区域的可用百分比。有了这样的结构,你可以用上面的枚举来表示任何你可以表示的东西。例如,为您提供绝对区域的数据提供者,用具有区域和 100% 可用的结构表示。为您提供百分比的数据提供者用一个结构表示,该结构具有他们设置的百分比和绝对区域,因此该区域的百分比是数据提供者想要报告的实际可用区域。您可以从这两种类型的提供程序中获得数据的“标准化”表示,并且您可以添加几个运算符来启用与实例的比较和算术计算。

于 2008-10-07T20:37:50.730 回答
5

如果可能的话,我宁愿将您的示例分成两个值,其中您的枚举是“Percent”和“SquareFeet”,第二个值是量词。将它们绑定在一个结构中。

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

更新:如果值是行业公认的术语,您的命名方案将是合适的,几乎到了符号的地步。例如,拥有一个包含诸如“ISO9001”之类的值而不是两个值(一个包含“ISO”和一个 int 为 9001 的枚举)的枚举是安全的。有一个像下面这样的枚举也是合适的:

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

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

于 2008-10-07T20:33:32.407 回答