P.S.是否有一种简单的方法来获取类型供应商的所有枚举的集合,但未知的除外(其short/int值将为0,如bill wagner所规定)?
DbVendor[] values = Enum.GetValues(typeof(DbVendor))
.Cast<DbVendor>()
.Where(v => v != DbVendor.Unknown)
.ToArray();
要将友好名称与值关联,可以使用
DescriptionAttribute
,如图所示
this answer
. 处理
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();