Я также использую аннотацию Display. Вот то, что я в конечном итоге использовал, который работает для ОБА свойства и членов enum.
Вот мое перечисление:
public enum TagOrderStatus
{
[Display(ResourceType = typeof(TagStrings), Name = "TagOrderStatus_NotOrdered")]
NotOrdered = 0,
[Display(ResourceType = typeof(TagStrings), Name = "TagOrderStatus_ToOrder")]
ToOrder = 1,
[Display(ResourceType = typeof(TagStrings), Name = "TagOrderStatus_Ordered")]
Ordered = 2
}
Тогда мой маленький универсальный метод:
public static string GetLocalizedDisplay<TModel>(string pPropertyName)
{
DisplayAttribute attribute;
if (typeof(TModel).IsEnum)
{
MemberInfo member = typeof(TModel).GetMembers().SingleOrDefault(m => m.MemberType == MemberTypes.Field && m.Name == pPropertyName);
attribute = (DisplayAttribute)member.GetCustomAttributes(typeof(DisplayAttribute), false)[0];
}
else
{
PropertyInfo property = typeof(TModel).GetProperty(pPropertyName);
attribute = (DisplayAttribute)property.GetCustomAttributes(typeof(DisplayAttribute), true)[0];
}
if (attribute.ResourceType != null)
return new ResourceManager(attribute.ResourceType).GetString(attribute.Name);
else
return attribute.Name;
}
Затем этот способ можно использовать для получения свойства отображения отдельного члена для члена перечисления:
string disp = GetLocalizedDisplay<Tag.TagOrderStatus>("Ordered");
Или собственность:
string disp = GetLocalizedDisplay<Tag>("OwnerName");
Я люблю дженерики. Надеюсь, это поможет !!