Я создал небольшое приложение, которое я сейчас нахожу в процессе определения специфического для культуры текста для констант на каждой из страниц. Я использовал несколько списков переходов Enum DropDownLists и использовал атрибут Display(Name="Something")
для каждого из значений Enum для отображения имени строки.Преобразование типа культуры Enum DisplayName String to Enum
Теперь, когда я использую файлы ресурсов для определения текста, основанный на культуре я должен был изменить значения атрибутов [Display(Name="SomeResourceValue", ResourceType=typeof(Resources.Resources))]
Проблема, которую я имею, что я имел статический метод, который принимает строка DisplayName
и возвращает значение Enum (при условии предоставления типа Enum), который теперь не работает с момента ввода файлов ресурсов.
Метод, который я пытаюсь улучшить выглядит следующим образом:
//Converts Enum DisplayName attribute text to it's Enum value
public static T GetEnumDisplayNameValue<T>(this string name)
{
var type = typeof(T);
if (!type.IsEnum)
throw new ArgumentException();
FieldInfo[] fields = type.GetFields();
var field = fields
.SelectMany(f => f.GetCustomAttributes(
typeof(DisplayAttribute), false), (
f, a) => new { Field = f, Att = a }).SingleOrDefault(a => ((DisplayAttribute)a.Att)
.Name == name);
return field == null ? default(T) : (T)field.Field.GetRawConstantValue();
}
Если кто-то может помочь мне улучшить это позволить для поиска ресурсов, я бы очень признателен.