你怎么看,拥有这样一个枚举是一个好主意:
enum AvailableSpace { Percent10, Percent20, SqF500, SqF600 }
问题是关于值名称的语义,即百分比和平方英尺.我真的相信这不是一个好主意,但我无法找到和指导等支持这一点.
编辑:这将用于确定实体的状态 - 即作为描述对象状态的只读属性.如果我们知道总空间(即对象本身知道它),我们可以选择在内部进行转换,因此我们要么只有百分比,要么是平方英尺,要么两者都有.争论的焦点是,"两者"并不是一个好主意.
以上是一个例子,但真正的问题是一些数据提供者向我们发送总数(sq.f.)和其他百分比,我的目标是统一用户界面.我可以自由地进行一些近似,因此将根据我们想要提供信息的准确度来调整确切的值.
问题只是关于值名称的语义,而不是内容 - 即,如果将百分比放在(潜在的)int枚举中是个好主意.
答案:不,使用枚举表示值不是一个好主意.特别是在两个语义上不同的尺度中的值.您不应该使用枚举值.
原因是:两个量表的枚举值之间的关系是什么,比如Percent10和SqF600?如何扩展代码中可以表示的值列表?你如何对这些值进行比较和算术运算?
建议(没有要求,但在这里是.:-)):您尝试做的语义将更好地反映在包含两个字段的结构中 - 一个用于绝对区域,另一个用于该绝对区域的可用百分比.通过这种结构,您可以使用上面的枚举表示您可以表示的任何内容.例如,为您提供绝对区域的数据提供程序使用区域和100%可用的结构表示.给出百分比的数据提供者用结构表示它们设置的百分比和绝对区域,使得该区域的百分比是数据提供者想要报告的实际可用区域.您可以从两种类型的提供程序中获得数据的"规范化"表示,并且可以添加几个运算符以启用与实例的比较和算术计算.
如果可能的话,我宁愿将你的例子分成两个值,你的枚举是"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 }
如果术语"百分比10"和"Sqf500"不是艺术术语或在规范,数据字典等中明确定义,那么将它们用作枚举中的值是不合适的.