Можно ли сделать так, чтобы перечисление генерировало свои значения автоматически - PullRequest
1 голос
/ 28 апреля 2011

С этот образец на MSDN:

[Flags] 
public enum Pet {
   None = 0,
   Dog = 1,
   Cat = 2,
   Bird = 4,
   Rabbit = 8,
   Other = 16
}

Есть ли способ, чтобы enum генерировал свои значения автоматически?

Ответы [ 3 ]

6 голосов
/ 28 апреля 2011

Предполагая, что вы действительно хотите перечисление "flags", нет никакого автоматизированного способа сделать это, нет. Пример Pet не очень подходит для флагов, но я предполагаю, что это просто неудачный выбор примера. Один вариант, который уменьшает вероятность ошибки немного , заключается в использовании битовых операций:

[Flags] 
public enum Pet {
   None = 0,
   Dog = 1 << 0,
   Cat = 1 << 1,
   Bird = 1 << 2,
   Rabbit = 1 << 3,
   Other = 1 << 4
}

Если все использует сдвиг битов, вы знаете, что случайно не получите значение, которое на самом деле является несколькими битами.

0 голосов
/ 28 апреля 2011

Да, просто оставьте их в стороне:

public enum Pet {
   None,
   Dog,
   Cat,
   Bird,
   Rabbit,
   Other
}

Но таким образом вы не должны украшать перечисление атрибутом flags, потому что значения больше не могут быть объединены осмысленным образом.

0 голосов
/ 28 апреля 2011

Только не ставьте знак равенства и значение.

Например,

enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

является одним из примеров на веб-сайте MSDN (http://msdn.microsoft.com/en-us/library/sbbt4032(v=vs.80).aspx)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...