Nullable布尔切换的命名约定

时间:2012-01-20 03:38:48

标签: c# naming-conventions

我有一个消息实体说(Message),可以由创建者配置为

  1. IsWebOnly其中只会在常规网站上显示
  2. IsMobileOnly其中只会在网站的移动版本上显示
  3. 此消息也可以设置为在网站的两种表格(常规和移动)上显示
  4. 我想将此属性捕获为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对我来说似乎更具吸引力,因为该物业的状态不会再增加。

2 个答案:

答案 0 :(得分:3)

  

这个三态是否应该用Enum而不是nullable来捕获   布尔值?

当然,这将是自我记录并且更容易维护 - 与枚举一起使用。你当前的代码充其量是混乱的,只是看着它我很难理解逻辑 - 我不期待维护代码 - 通常可以使用可空的bool来捕获true,false和没有值作为第三状态。重新解释缺席值(null)意味着不同的东西只会引发麻烦。

答案 1 :(得分:3)

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

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

如果您担心对象的大小,可以将基础类型声明为byte,然后这实际上会小于bool ?,这是两个字节。