I use a enum for describe different project states:
[Flags]
public enum ProjectStatus
{
Undefined = 1 << 0,
Closed = 1 << 1,
Opened =1 << 2,
ToMigrate = 1<<3
}
Now, if I want to go from one state to another, I have to check if this is possible. For this I had the idea to extend my enum as follow:
[Flags]
public enum ProjectStatus
{
Undefined = 1 << 0,
Closed = 1 << 1,
Opened = 1 << 2,
ToMigrate = 1<<3,
CanOpen = Opened | ToMigrate,
CanClose = Opened,
CanDelete = Closed | ToMigrate
}
With this solution im able to check a state change:
if ((actualState & CanOpen) == CanOpen)
{
// open is allowed.
}
My only problem is now, that e.g. CanClose and Opened have the same underlying value and CanClose == Opened is true.
So my question is, if someone knows an alternative way to handle this problem in a more elegant way. (maybe with two different enum types?)
thanks in advance!
Use distinct values, do not mess up them together, for example
And after check if the project can be closed in a function
Something like this. You should definitely imrove this code, this is just an example.
In other words, move desicional logic out of enum in a functions. In enum leave only a raw data.