Вы можете указать значения для перечислений, это необходимо для случаев флагов:
[Flags]
enum MyFlags {
Alpha=1,
Beta=2,
Gamma=4,
Delta=8
}
что означает [Флаги] выше?
Это означает, что среда выполнения будет поддерживать побитовые операции со значениями. Не имеет значения значения, которые сгенерирует компилятор. Например. если вы сделаете это
var x = MyFlags.Alpha | MyFlags.Beta;
с атрибутом Flags результат x.ToString()
равен "Alpha, Beta
". Без атрибута было бы 3. Также изменяет поведение при разборе.
РЕДАКТИРОВАТЬ: Обновлено с лучшими именами, и компилятор не жалуется, используя побитовые операции с атрибутом не-flags, по крайней мере, не C # 3 или 4 (новости для меня).