Как использовать Enum с дополнительными опциями (All, None) - PullRequest
7 голосов
/ 09 февраля 2010

У меня есть перечисление, которое:

  • включено в мой класс как собственность
  • представляет некоторые значения из таблицы базы данных (пара типов)
  • отображается в DropBox, поэтому его можно использовать в качестве фильтра

Теперь я хотел бы добавить значение «All» (или «None», например) к этому DropBox.

Как мне это сделать:

  • добавить значение 'All' в Enum?
  • добавить значение «Все» в DropBox, изменить тип моего свойства с Enum на String
  • какой-то другой вариант ...

Ответы [ 3 ]

6 голосов
/ 09 февраля 2010

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

Рассмотрим использование перечисления флагов , если вы собираетесь использовать несколько комбинаций. В вашем случае это будет означать, что выбор любой комбинации типов является допустимым вводом.

[Flags]
enum MyTypes
{
    None = 0,
    One = 1,
    Two = 2,
    Three = 4,
    Four = 8,
    All = One | Two | Three | Four
}

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

enum MyType
{
    None,
    One,
    Two,
    Three,
    Four,
    All
}
2 голосов
/ 09 февраля 2010

ИМХО, лучше добавить значение 'All' к вашему перечислению следующим образом:

enum SampleEnum 
{
    Value1 = 1,
    Value2 = 2,
    Value3 = 4,
    All = Value1 | Value2 | Value3 
}

Таким образом, вам не нужно заботиться об отображаемых элементах в вашем выпадающем списке, и вы можете реагировать на выбор этого значения в вашем коде, если это будет необходимо ...

1 голос
/ 22 октября 2012

У меня есть еще один трюк, вы можете проверить его в моем блоге: Enum Trick

Рекомендуется указывать None или Unknown как ноль (0).

«Все» рассчитывается как сумма всех значений.

[Flags]
public enum MyTypes
{
    None = 0,
    One = 1,
    Two = 2,
    Three = 4,
    Four = 8,
    Last,
    All = (Last << 1) - 3,
}

Теперь, когда вы добавляете значения, «Все» также обновляется (никаких изменений не требуется).

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