带有枚举的ALL或null

本文关键字:null ALL 枚举 | 更新日期: 2023-09-27 18:20:08

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

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

有理由这样或那样做吗?

带有枚举的ALL或null

就传达意义而言,使用Regions.All更明确。您可以将该含义"分配"给null,计算机也可以。但是,程序的读取器需要从您使用null枚举值的方式或从阅读您的评论中解密该含义。另一方面,Regions.All是自证自明的。

在需要指定"All"或"Null"类型的枚举中,我通常使用Flag属性并使用逐位&|。这是一个更加灵活的解决方案。

至于让一个可以为null的类型或让一个选项为"All",我认为如果这对你来说有意义,那么我认为没有问题。我只是更喜欢使用Flags。

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

此外,名为Regions的枚举可能具有类似NortheastSoutheastMidwestSouthwestWest的值。现在,如果我错了,请纠正我,但我不认为美国有任何一个地区被称为"All"。在我在那里呆了几年的时间里,我在电视上听到天气预报员谈论西部的天气,东南部的天气等等,但从来没有听说过某个地方的天气被称为"All"。因此,我倾向于认为不存在这样的区域。因此,在区域枚举中包含"All"是一种破解方法。突然之间,Regions枚举与区域无关;而是关于区域和/或其滤波。这种意义上的转变是编程中需要注意的,通常也要避免。