C# 可空布尔切换的命名约定
我有一个消息实体,比如(C# 可空布尔切换的命名约定,c#,naming-conventions,C#,Naming Conventions,我有一个消息实体,比如(message),创建者可以将其配置为 IsWebOnlywhere by仅在常规网站上显示 ismobilileonly在此之前,它将仅显示在网站的移动版上 该消息也可以设置为在网站的两种形式(常规和移动)上显示 我想将此属性捕获为可为空的布尔值。说X public class Message { public bool? X {get;set;} public bool IsMobileMessage { get {return X.HasV
message
),创建者可以将其配置为
IsWebOnly
where by仅在常规网站上显示ismobilileonly
在此之前,它将仅显示在网站的移动版上 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} }
}
- 该属性最可读的名称是什么
- 是否应使用
而不是枚举
捕获此三态?可为空的布尔值
似乎对我更有吸引力,因为属性的状态不会有进一步的添加Nullable boolean
null
)重新解释为不同的含义只会带来麻烦
是否应该使用枚举而不是可为null的枚举捕获此三态
布尔值
当然,这将是自文档化的,并且更易于维护-使用枚举。您当前的代码充其量是令人困惑的,只是看看它,我很难理解逻辑-我不希望维护该代码-传统上,可以使用可为空的bool来捕获真、假以及作为第三状态的值的缺失。将值缺失(
null
)重新解释为不同的意思只会带来麻烦。因为第三种状态是两个条件都为真,所以实际上有两个布尔值。当然,这意味着有四个状态,其中一个状态无效,但即使如此,我还是会使用Flags枚举:
[Flags]
enum MessageType
{
Web = 1,
Mobile = 2,
Both = Web | Mobile
}
如果您关心对象的大小,您可以将底层类型声明为byte,然后它实际上将小于bool?,即两个字节。因为第三种状态是两个条件都为true,所以您确实有两个boolean。当然,这意味着有四个状态,其中一个状态无效,但即使如此,我还是会使用Flags枚举:
[Flags]
enum MessageType
{
Web = 1,
Mobile = 2,
Both = Web | Mobile
}
如果您关心对象的大小,您可以将底层类型声明为byte,然后它实际上将小于bool?,即两个字节。我认为
enum bool{True,False,FileNotFound}
是常见的模式。我认为enum Bool{True,False,FileNotFound}代码>是常见的模式。