可为null的布尔切换的命名约定
本文关键字:命名约定 布尔切 可为 null | 更新日期: 2023-09-27 18:20:55
我有一个消息实体,比如(Message
),创建者可以将其配置为
IsWebOnly
,此处仅在常规网站上显示IsMobileOnly
,其中它将仅在移动版网站上显示- 该消息也可以设置为在网站的两种形式(常规和移动)上显示
我想将此属性捕获为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的bool将用于捕获true、false和值的缺失作为第三状态。将价值缺失(null
)重新解释为不同的东西只会带来麻烦。
由于第三种状态是两个条件都为true,因此实际上有两个布尔值。当然,这意味着有四个状态,其中一个状态无效,但即使如此,我也会使用Flags枚举:
[Flags]
enum MessageType
{
Web = 1,
Mobile = 2,
Both = Web | Mobile
}
如果你关心对象的大小,你可以将底层类型声明为字节,然后它实际上会小于bool?,这是两个字节。