Как получить комбинированный список с привязкой перечисления с пользовательским форматированием строки для значений перечисления? - PullRequest
132 голосов
/ 28 апреля 2009

В посте Enum ToString описан метод использования пользовательского атрибута DescriptionAttribute, например:

Enum HowNice {
  [Description("Really Nice")]
  ReallyNice,
  [Description("Kinda Nice")]
  SortOfNice,
  [Description("Not Nice At All")]
  NotNice
}

И затем вы вызываете функцию GetDescription, используя синтаксис, такой как:

GetDescription<HowNice>(NotNice); // Returns "Not Nice At All"

Но это не очень помогает мне , когда я хочу просто заполнить ComboBox значениями перечисления, поскольку я не могу заставить ComboBox вызвать GetDescription.

То, что я хочу, имеет следующие требования:

  • Чтение (HowNice)myComboBox.selectedItem вернет выбранное значение в качестве значения перечисления.
  • Пользователь должен видеть удобные для пользователя строки отображения, а не только имя значений перечисления. Поэтому вместо "NotNice" пользователь увидит "Not Nice At All".
  • Надеемся, что решение потребует минимальных изменений кода в существующих перечислениях.

Очевидно, я мог бы реализовать новый класс для каждого создаваемого перечисления и переопределить его ToString(), но для каждого перечисления это большая работа, и я бы предпочел этого избежать.

Есть идеи?

Черт, я даже добавлю объятия в качестве награды: -)

Ответы [ 21 ]

0 голосов
/ 27 января 2011

Вы можете определить Enum как

Enum HowNice {   
[StringValue("Really Nice")]   
ReallyNice,   
[StringValue("Kinda Nice")]   
SortOfNice,   
[StringValue("Not Nice At All")]   
NotNice 
} 

и затем используйте HowNice.GetStringValue().

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