Я использую перечисление для описания различных состояний проекта:
[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.
Так что мой вопрос в том, знает ли кто-нибудь альтернативный способ решения этой проблемы более элегантным способом. (может быть с двумя различными типами enum?)
спасибо заранее!