C# 在枚举中表示项目状态的优雅方式
我使用枚举来描述不同的项目状态:C# 在枚举中表示项目状态的优雅方式,c#,enums,flags,C#,Enums,Flags,我使用枚举来描述不同的项目状态: [Flags] public enum ProjectStatus { Undefined = 1 << 0, Closed = 1 << 1, Opened =1 << 2, ToMigrate = 1<<3 } 现在我唯一的问题是,例如CanClose和Opened具有相同的基础值,CanClose==Opened是真的 所以我的问题是,如果有人知道另一种更优雅的方法来处理这个问题。
[Flags]
public enum ProjectStatus
{
Undefined = 1 << 0,
Closed = 1 << 1,
Opened =1 << 2,
ToMigrate = 1<<3
}
现在我唯一的问题是,例如CanClose和Opened具有相同的基础值,CanClose==Opened是真的
所以我的问题是,如果有人知道另一种更优雅的方法来处理这个问题。(可能有两种不同的枚举类型?)
提前谢谢 使用不同的值,例如,不要将它们混在一起
public enum ProjectStatus
{
Undefined = 1 << 0,
Closed = 1 << 1,
Opened = 1 << 2,
ToMigrate = 1<<3
}
像这样的。你一定要修改这段代码,这只是一个例子
换句话说,将决策逻辑移出函数中的枚举。在enum中只留下一个原始数据。不直接回答您的问题,我不认为
CanOpen
CanClose
应该是ProjectStatus
的一部分,它们是Project
的属性
[Flags]
public enum ProjectStatus
{
Undefined = 1 << 0,
Closed = 1 << 1,
Opened =1 << 2,
ToMigrate = 1<<3
}
public class Project
{
//other properties
public ProjectStatus Status { get; set; }
public bool CanOpen
{
get
{
return this.Status == ProjectStatus.Opened
|| this.Status == ProjectStatus.StatusToMigrate;
}
}
}
[标志]
公共枚举项目状态
{
Undefined=1谢谢你的回答。我也或多或少有这个解决方案。但我想可能还有一个更简短的形式。因为我的真实ProjectStatus大约有10个州,CanXxxx州比上面描述的更复杂。但我想我必须这样生活:-)。@rhe1980:特别是如果州很复杂,不要将它们包含在枚举,但使用函数进行计算。
public enum ProjectStatus
{
Undefined = 1 << 0,
Closed = 1 << 1,
Opened = 1 << 2,
ToMigrate = 1<<3
}
public bool CanClose(ProjectStatus status)
{
return (status & Opened) == Opened;
}
[Flags]
public enum ProjectStatus
{
Undefined = 1 << 0,
Closed = 1 << 1,
Opened =1 << 2,
ToMigrate = 1<<3
}
public class Project
{
//other properties
public ProjectStatus Status { get; set; }
public bool CanOpen
{
get
{
return this.Status == ProjectStatus.Opened
|| this.Status == ProjectStatus.StatusToMigrate;
}
}
}