ALL或null与枚举?

时间:2012-01-11 02:01:02

标签: c# enums null

我注意到我在同一个项目中一直在做这个不一致的事情。在某些地方,我会有一个带有ALL选项的枚举,而在其他地方,我会将我的枚举作为可空类型,其中空值表示所有(或没有过滤器)。

当我不得不写if (Region != null && Region != Regions.ALL)之类的东西时,我注意到了它。

有没有理由去某种方式?

3 个答案:

答案 0 :(得分:7)

就传达意义而言,使用Regions.All更明确。您可以将该含义“分配”给null,计算机就可以了。但是,程序的读者需要根据您使用null枚举值的方式或阅读您的评论来解除其含义。另一方面,Regions.All是自我记录和不言自明的。

答案 1 :(得分:2)

如果您需要指定“全部”或“空”类型的枚举,我通常会使用Flag属性并使用按位&|。这是一个更灵活的解决方案。

至于制作可空类型或有一个选项是“全部”,我认为如果它对你有意义,那么我认为没有问题。我只是喜欢使用Flags。

答案 2 :(得分:2)

通常,我们使用null表示“未指定”或“不存在”或“不适用”。因此,在过滤器的情况下,允许null是有意义的,因为它意味着“无过滤”。

此外,名为Regions的枚举可能包含NortheastSoutheastMidwestSouthwestWest等值。现在,如果我错了,请纠正我,但我不认为在美国有任何名为“全部”的地区。在我长达几年的逗留期间,我听到电视上的气象员谈到了西方的天气,以及东南部的天气等等,但在一些名为“全部”的地方从来没有天气。所以,我倾向于认为没有这样的地区。因此,在一个区域的枚举中包括“全部”是一个黑客。突然间,Regions枚举与地区无关;相反,它是关于区域和/或过滤的。在编程中要注意这种意义上的变化,并且通常要避免。

相关问题