Могу ли я использовать пространство между флагами Enum для хранения целых чисел? Я только что попробовал это:
[Flags]
public enum Occupation : int
{
Open=16,
Flagged = 32,
Bomb = 64
}
В моем ожидании это должно привести к следующему перечислению:
0b0 ... 0
0b1 ... 1
0b10 ... 2
.
.
0b1111 ... 15
0b10000 ... Open
0b10001 ... Open + 1
0b10010 ... Open + 2
.
.
0b011111 ... Open + 15
0b100000 ... Flagged
0b100001 ... Flagged + 1
.
0b101111 ... Flagged + 15
0b110000 ... Flagged, Open
0b110001 ... Flagged, Open + 1
и так далее. Я надеялся, что Enum просто проигнорирует значения между флагами, но кажется, что они все установлены в 0 (или нет), если я бит-и Enum, как это:
Occupation occ = Occupation.Open; //initialize the enum with a Flag
occ += 8; //add 8 to the first bits of the enum without touching the Flags
Console.WriteLine((occ & (Occupation) 8 ).ToString());
//Expected Output: 8
//Actual Output: 0
Согласно этой документации там должно быть возможно "хранить некоторые значения" там (по крайней мере, если вы приведете его к целому числу). Должен ли я повсеместно приводить его из целого числа или есть лучший способ сделать это?