Я использую атрибут [Description]
от System.ComponentModel
Пример:
public enum RoleType
{
[Description("Allows access to public information")] Guest = 0,
[Description("Allows access to the blog")] BlogReader = 4,
}
Тогда читать из него я делаю
public static string ReadDescription<T>(T enumMember)
{
var type = typeof (T);
var fi = type.GetField(enumMember.ToString());
var attributes = (DescriptionAttribute[])
fi.GetCustomAttributes(typeof (DescriptionAttribute), false);
return attributes.Length > 0 ?
attributes[0].Description :
enumMember.ToString();
}
Тогда использование
ReadDescription(RoleType.Guest);
Примечание: это решение предполагает использование одной культуры, поскольку о нескольких культурах ничего специально не спрашивали. Если вы находитесь в ситуации, когда вам нужно работать с несколькими культурами, я бы использовал DescriptionAttribute
или аналогичный для хранения ключа к файлу ресурсов, учитывающему культуру. Хотя вы можете хранить член enum непосредственно в файле .resx, что создаст максимально тесную связь. Я не вижу причин, почему вы хотели бы связать внутреннюю работу вашего приложения (имена членов enum) с ключевыми значениями, которые существуют для целей интернационализации.