我有一个消息实体说(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
对我来说似乎更具吸引力,因为该物业的状态不会再增加。答案 0 :(得分:3)
这个三态是否应该用Enum而不是nullable来捕获 布尔值?
当然,这将是自我记录并且更容易维护 - 与枚举一起使用。你当前的代码充其量是混乱的,只是看着它我很难理解逻辑 - 我不期待维护代码 - 通常可以使用可空的bool来捕获true,false和没有值作为第三状态。重新解释缺席值(null
)意味着不同的东西只会引发麻烦。
答案 1 :(得分:3)
由于第三个状态是两个条件都是真的,你真的有两个布尔值。当然,这意味着有四种状态,其中一种状态无效,但即便如此,我也会使用Flags枚举:
[Flags]
enum MessageType
{
Web = 1,
Mobile = 2,
Both = Web | Mobile
}
如果您担心对象的大小,可以将基础类型声明为byte,然后这实际上会小于bool ?,这是两个字节。