我使用枚举来描述不同的项目状态:
[Flags]
public enum ProjectStatus
{
Undefined = 1 << 0,
Closed = 1 << 1,
Opened =1 << 2,
ToMigrate = 1<<3
}
现在,如果我想从一种状态转到另一种状态,我必须检查这是否可行。为此,我有一个想法来扩展我的枚举,如下所示:
[Flags]
public enum ProjectStatus
{
Undefined = 1 << 0,
Closed = 1 << 1,
Opened = 1 << 2,
ToMigrate = 1<<3,
CanOpen = Opened | ToMigrate,
CanClose = Opened,
CanDelete = Closed | ToMigrate
}
通过这个解决方案,我能够检查状态更改:
if ((actualState & CanOpen) == CanOpen)
{
// open is allowed.
}
我现在唯一的问题是,例如CanClose 和 Opened 具有相同的基础值,并且 CanClose == Opened 为 true。
所以我的问题是,是否有人知道以更优雅的方式处理这个问题的替代方法。 (也许有两种不同的枚举类型?)
提前致谢!
最佳答案
例如,使用不同的值,不要将它们混淆在一起
public enum ProjectStatus
{
Undefined = 1 << 0,
Closed = 1 << 1,
Opened = 1 << 2,
ToMigrate = 1<<3
}
检查项目是否可以在函数中关闭
public bool CanClose(ProjectStatus status)
{
return (status & Opened) == Opened;
}
类似这样的事情。您绝对应该改进这段代码,这只是一个示例。
换句话说,将指定逻辑移出函数中的枚举。在枚举中仅保留原始数据。
关于c# - 在枚举中表示项目状态的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9782844/