P.S. Есть ли простой способ получить коллекцию всех перечислений типа vendor, кроме Unknown (который будет иметь значение short / int 0, как предписано Биллом Вагнером)?
DbVendor[] values = Enum.GetValues(typeof(DbVendor))
.Cast<DbVendor>()
.Where(v => v != DbVendor.Unknown)
.ToArray();
Чтобы связать понятное имя со значениями, вы можете использовать DescriptionAttribute
, как показано в в этом ответе . Обработайте событие Format
для ComboBox
, чтобы отобразить описание:
private void comboBoxVendor_Format(object sender, ListControlConvertEventArgs e)
{
DbVendor vendor = (DbVendor)e.ListItem;
e.Value = vendor.GetDescription();
}
Примечание: если ваше приложение должно быть локализуемым, атрибут Description
, вероятно, не лучший вариант. Вместо этого вы можете использовать строковые ресурсы с именами, такими как DisplayName_DbVendor_Oracle
, DisplayName_DbVendor_SqlServer
и т. Д. Затем можно извлечь отображаемое имя для значения следующим образом:
DbVendor vendor = ...;
string displayName = Properties.Resources.ResourceManager.GetString("DisplayName_DbVendor_" + vendor);
РЕДАКТИРОВАТЬ: если вам нужно отсортировать значения по описанию, просто измените запрос LINQ следующим образом:
DbVendor[] values = Enum.GetValues(typeof(DbVendor))
.Cast<DbVendor>()
.Where(v => v != DbVendor.Unknown)
.OrderBy(v => v.GetDescription())
.ToArray();