我见过很多关于将字符串映射到枚举的问题和答案,反之亦然,但是如何将一系列本地化的字符串映射到枚举?如何国际化表示C#枚举值的字符串?
我应该只是创建一个extension method like this从资源文件返回正确的字符串?有没有一种方法来本地化solutions like this中使用的属性(如“描述”)?
哪一个是首选解决方案 - 扩展方法或属性。在我看来,这不是属性的预期目的。事实上,现在我想到了,如果我使用扩展方法,那么属性看起来像是我用来在资源文件中为我想用来代替枚举值的本地化字符串指定一个键。
编辑 - 例如:
考虑下面的枚举,
public enum TransactionTypes {
Cheque = 1,
BankTransfer = 2,
CreditCard = 3
}
我想一个方法来映射每种类型的本地化字符串。我开始使用一个扩展方法来使用一个switch语句和对资源文件的强类型引用。
但是,每个枚举的扩展方法似乎不是一个很好的解决方案。我已开始遵循this为每个枚举值创建一个自定义属性。该属性具有包含本地化字符串的资源文件的基本名称和密钥。在上面的枚举,例如,我有这样的:
...
[EnumResourceAttribute("FinancialTransaction", "Cheque")]
Cheque = 1,
...
其中“FinanacialTransaction”是的resx文件,“检查”是字符串键。我试图创建一个实用程序方法,我可以从任何枚举中传递任何值,并让它返回该值的本地化字符串表示形式,假定指定了自定义属性。我只是无法弄清楚如何动态访问资源文件和其中的一个关键。
+1我1分钟太晚了:) – 2010-05-25 14:06:01
我本来应该更清晰 - 我不打算使用比其他任何资源文件(我们已经将它们用于需要国际化域名的其他一切)。我正在寻找将资源字符串映射到枚举的解决方案。 – Matt 2010-05-25 14:14:55
@Duke:好的,这不是非常清楚你想要什么 - 我已经用一个非常简单的扩展方法更新了我的答案,但是我怀疑你是在追求更多的东西... – 2010-05-25 14:24:15