可为null的布尔切换的命名约定

本文关键字:命名约定 布尔切 可为 null | 更新日期: 2023-09-27 18:20:55

我有一个消息实体,比如(Message),创建者可以将其配置为

  1. IsWebOnly,此处仅在常规网站上显示
  2. IsMobileOnly,其中它将仅在移动版网站上显示
  3. 该消息也可以设置为在网站的两种形式(常规和移动)上显示

我想将此属性捕获为Nullable boolean。比如X

 public class Message {
     public bool? X {get;set;}
     public bool IsMobileMessage { get {return X.HasValue ? !X.Value : true } }
     public bool IsWebMessage {get {return X.HasValue ? X.Value : true} }
   }
  • 该物业最易读的名称是什么
  • 应该用Enum而不是nullable boolean来捕获这种三态吗?
    • Nullable boolean似乎对我更有吸引力,因为不会对该物业的状态进行进一步的添加

可为null的布尔切换的命名约定

是否应使用枚举而不是可为null的枚举捕获此三态布尔值?

当然,这将是自我记录的,而且更容易维护——使用枚举。您当前的代码充其量是令人困惑的,光看它,我很难理解其中的逻辑-我不希望维护该代码-传统上,可以为null的bool将用于捕获true、false和的缺失作为第三状态。将价值缺失(null)重新解释为不同的东西只会带来麻烦。

由于第三种状态是两个条件都为true,因此实际上有两个布尔值。当然,这意味着有四个状态,其中一个状态无效,但即使如此,我也会使用Flags枚举:

[Flags]
enum MessageType
{
    Web = 1,
    Mobile = 2,
    Both = Web | Mobile
}

如果你关心对象的大小,你可以将底层类型声明为字节,然后它实际上会小于bool?,这是两个字节。