一尘不染

如何使用枚举值的自定义字符串格式设置枚举绑定组合框?

c#

Enum ToString中,描述了一种使用自定义属性的方法,DescriptionAttribute如下所示:

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

然后,您GetDescription使用如下语法调用function :

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

但是, 当我只想用枚举的值填充ComboBox时GetDescription,这并没有真正帮助我 ,因为我无法强制ComboBox调用

我要具有以下要求:

  • 读取(HowNice)myComboBox.selectedItem将返回所选值作为枚举值。
  • 用户应该看到用户友好的显示字符串,而不仅仅是枚举值的名称。因此NotNice,用户不会看到“ ”,而是会看到“ Not Nice At All”。
  • 希望该解决方案将需要对现有枚举进行最少的代码更改。

显然,我可以为我创建的每个枚举实现一个新类,并覆盖它的ToString(),但是每个枚举都需要大量工作,我宁愿避免这种情况。

有任何想法吗?

哎呀,我什至会拥抱一个赏金:-)


阅读 373

收藏
2020-05-19

共1个答案

一尘不染

您可以编写一个TypeConverter来读取指定的属性,以在您的资源中查找它们。因此,您将获得对显示名称的多语言支持,而无需太多麻烦。

查看TypeConverter的ConvertFrom / ConvertTo方法,并使用反射读取枚举 字段 上的属性。

2020-05-19