我的枚举包含以下值:
private enum PublishStatusses{
NotCompleted,
Completed,
Error
};
Run Code Online (Sandbox Code Playgroud)
我希望能够以用户友好的方式输出这些值.
我不需要能够再次从字符串变为值.
在帖子Enum ToString中,描述了一个方法来使用自定义属性,DescriptionAttribute如下所示:
Enum HowNice {
[Description("Really Nice")]
ReallyNice,
[Description("Kinda Nice")]
SortOfNice,
[Description("Not Nice At All")]
NotNice
}
Run Code Online (Sandbox Code Playgroud)
然后,GetDescription使用如下语法调用函数:
GetDescription<HowNice>(NotNice); // Returns "Not Nice At All"
Run Code Online (Sandbox Code Playgroud)
但是,当我想简单地使用枚举值填充ComboBox时GetDescription,这并没有真正帮助我,因为我不能强制ComboBox调用.
我想要的是有以下要求:
(HowNice)myComboBox.selectedItem将返回所选值作为枚举值.NotNice,用户不会看到" Not Nice At All" 而是看到" ".显然,我可以为我创建的每个枚举实现一个新类,并覆盖它ToString(),但这对每个枚举来说都是很多工作,我宁愿避免这样做.
有任何想法吗?
我已经看到很多关于将字符串映射到枚举的问题和答案,反之亦然,但是如何将一系列本地化字符串映射到枚举?
我应该只创建一个这样的扩展方法,从资源文件中返回正确的字符串吗?有没有办法本地化在这样的解决方案中使用的属性(如"描述")?
哪个是首选解决方案 - 扩展方法或属性.在我看来,这不是属性的预期目的.事实上,现在我考虑一下,如果我使用扩展方法,属性似乎就像我用来在资源文件中为我想要用来代替枚举值的本地化字符串指定一个键.
编辑 - 示例:
鉴于以下枚举,
public enum TransactionTypes {
Cheque = 1,
BankTransfer = 2,
CreditCard = 3
}
Run Code Online (Sandbox Code Playgroud)
我想要一种方法将每种类型映射到本地化的字符串.我开始使用枚举的扩展方法,该方法使用switch语句和对资源文件的强类型引用.
但是,每个枚举的扩展方法似乎不是一个很好的解决方案.我已经开始遵循此操作为每个枚举值创建自定义属性.该属性具有包含本地化字符串的资源文件的基本名称和键.例如,在上面的枚举中,我有:
...
[EnumResourceAttribute("FinancialTransaction", "Cheque")]
Cheque = 1,
...
Run Code Online (Sandbox Code Playgroud)
其中"FinanacialTransaction"是resx文件,"Check"是字符串键.我正在尝试创建一个实用程序方法,我可以从任何枚举中传递任何值,并让它返回该值的本地化字符串表示形式,假设指定了自定义属性.我无法弄清楚如何动态访问资源文件及其中的密钥.