枚举类型允许为 null 还是定义一个 None 为枚举值更方便维护?这两种方案在实际场景中效果是一致的吗?存入数据库的话 nullable 似乎会占用更大的空间,哪个查询效率更高?

2024 年 12 月 19 日
 drymonfidelia
1670 次点击
所在节点    程序员
7 条回复
liuliuliuliu
2024 年 12 月 19 日
那个啥,你得先说语言,很多语言的枚举类型就不允许为 null
drymonfidelia
2024 年 12 月 19 日
@nikenidage1 我用过的几个语言好像都可以为 null ,像 C#
geelaw
2024 年 12 月 19 日
@drymonfidelia #2 那你可能要精进一下 C#,在 C# 里面枚举的取值范围就是底层整数类型的范围,所以不存在 null 。

设 T : struct, Enum 那么 T? 即 Nullable<T> 当然可以取 null ,另外 obejct 、ValueType 、IComparable 、IConvertible 、IFormattable 、ISpanFormattable 类型的变量都可以用来存储 boxed enum 的引用或 null 。
msg7086
2024 年 12 月 19 日
null 一般指的是值缺失。None 是值存在但语义为空。
xuld
2024 年 12 月 19 日
快速回答:无论什么时候,都首选定义一个 None
如果可为 null ,则表示需要一个指针位来存储枚举,增加复杂度
h1298841903
2024 年 12 月 19 日
定义 None 、UNINIT (未初始化)、IDLE (闲置状态),都可以代表 null ,总之,应该有个确定的状态,这样你画状态转换图的时候,也比较好画。
zizon
2024 年 12 月 19 日
既然你说到维护了,那么如果语法上允许为 null,那么就一定会有人用 null.

至于效率的问题,不到有问题的时候都不是问题.
出问题的时候无论怎样都是设计问题.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1098639

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX