我只是寫的例子在這裏告訴你如何能做到的映射。
考慮您枚舉所有值包含非ASCII字符:
public enum MyEnum
{
NonAsciiName1,
NonAsciiName2,
NonAsciiName3,
}
你可以改變它做到這一點,所有值都具有ASCII字符:
public enum MyEnum
{
AsciiName1,
AsciiName2,
AsciiName3,
}
public static class MyEnumExtensions
{
static readonly Dictionary<MyEnum, string> map = new Dictionary<MyEnum, string>
{
{ MyEnum.AsciiName1, "NonAsciiName1" },
{ MyEnum.AsciiName2, "NonAsciiName2" },
{ MyEnum.AsciiName3, "NonAsciiName3" },
};
public static string GetValue(this MyEnum key)
{
return map[key];
}
}
那麼你的代碼需要小更改使用此:
// you probably had something like:
var myEnumValue = MyEnum.NonAsciiName1;
var value = myEnumValue.ToString();
// now becomes:
var myEnumValue = MyEnum.AsciiName1;
var value = myEnumValue.GetValue();
或者DEHAAS建議使用以類似方式工作的屬性。但是,那麼你必須使用反射來獲得有點性能損失的值。
using System.ComponentModel;
public enum MyEnum
{
[DescriptionAttribute("NonAsciiName1")] AsciiName1,
[DescriptionAttribute("NonAsciiName2")] AsciiName2,
[DescriptionAttribute("NonAsciiName3")] AsciiName3,
}
public static class MyEnumExtensions
{
public static string GetValue(this MyEnum key)
{
return typeof(MyEnum).GetField(key.ToString())
.GetCustomAttributes(typeof(DescriptionAttribute), false)
.Cast<DescriptionAttribute>()
.Single()
.Description;
}
}
你可以使用Html字符嗎?這是一個網絡應用程序? – hunter 2011-03-23 19:39:03
如果將「數據」放在枚舉名稱中,有些東西聽起來很有趣。不確定NHibernate是如何工作的,但確實聽起來不錯。 (還要考慮ASCII /英文通常是最小公分母代碼格式)。有趣的關於語言支持國際化的問題,雖然(+1) - 希望看到規範退出。 – 2011-03-23 19:39:05
@ hunter有趣的問題。這可能是一個問題。我會嘗試使用MVC。 – zszep 2011-03-23 19:44:50