gpt4 book ai didi

c# - 在枚举中表示项目状态的优雅方式

转载 作者:行者123 更新时间:2023-11-30 22:30:13 26 4
gpt4 key购买 nike

我使用枚举来描述不同的项目状态:

[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 为真。

所以我的问题是,是否有人知道以更优雅的方式处理此问题的替代方法。 (也许有两种不同的枚举类型?)

提前致谢!

最佳答案

使用不同的值,不要把它们混在一起,例如

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com