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;  
       } 
   }
}