V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
drymonfidelia
V2EX  ›  程序员

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

  •  
  •   drymonfidelia · 2 天前 · 829 次点击
    7 条回复    2024-12-19 12:46:09 +08:00
    nikenidage1
        1
    nikenidage1  
       2 天前
    那个啥,你得先说语言,很多语言的枚举类型就不允许为 null
    drymonfidelia
        2
    drymonfidelia  
    OP
       2 天前
    @nikenidage1 我用过的几个语言好像都可以为 null ,像 C#
    geelaw
        3
    geelaw  
       2 天前 via iPhone   ❤️ 2
    @drymonfidelia #2 那你可能要精进一下 C#,在 C# 里面枚举的取值范围就是底层整数类型的范围,所以不存在 null 。

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

    至于效率的问题,不到有问题的时候都不是问题.
    出问题的时候无论怎样都是设计问题.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2537 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:00 · PVG 19:00 · LAX 03:00 · JFK 06:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.