В настоящее время я работаю над интересной структурой жестко закодированных данных. Пожалуйста, не отвечайте, как создать таблицу для этого. Конечно, тогда я бы отдал это себе, но мое любопытство слишком велико:).
Это основное перечисление , с которым я создаю выпадающий список
public enum ImportParamTypeEnum
{
[Display(Name = "none")]
None = 0,
[Display(Name = "Produkty")]
Product = 1,
[Display(Name = "Test")]
Test = 2,
}
Перечисленные ниже системные параметры для вышеуказанного выбора. Например, если я выбрал ImportParamTypeEnum.Product
в dropdown
, то на экране отображается I MappingColums.Product
системные параметры
public class MappingColums
{
public enum Product
{
[Display(Name = "pc")]
Token = 0,
[Display(Name = "Nazwa")]
Name = 1,
[Display(Name = "Cena")]
Price = 3,
[Display(Name = "Ilość")]
Quantity = 4,
[Display(Name = "Opis")]
Description = 5,
}
public enum Test
{
[Display(Name = "tc")]
TokenTest = 0,
[Display(Name = "NazwaTest")]
NameTest = 1,
[Display(Name = "CenaTest")]
PriceTest = 3,
[Display(Name = "IlośćTest")]
QuantityTest = 4,
[Display(Name = "OpisTest")]
DescriptionTest = 5,
}
}
Приведенный ниже код представляет собой фрагмент кода, который создает ViewModel
(я упростил некоторые вещи для простоты):
foreach (var e in Enum.GetValues(typeof(ImportParamTypeEnum)))
{
Type[] mappingColumnsTypes = typeof(MappingColums).GetNestedTypes();
Type type = mappingColumnsTypes.AsEnumerable().Where(x => x.Name == e.ToString()).FirstOrDefault();
FieldInfo[] fields = AssemblyHelper.GetFields(type);
foreach (var f in fields)
{
string i = f.GetValue(null).ToString();
}
}
AssemblyHelper
public static FieldInfo[] GetFields(Type obj)
{
return obj.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly);
}
Этот код отлично работает, но я не хочу работать с Values
из Enum, но с Display
атрибутом имени.
Вопрос
Как мне получить Display
атрибут имени по FieldInfo
внутри foreach (var f in fields)
Рабочий раствор
Я случайно написал что-то вроде этого:
foreach (var f in fields)
{
//insted of:
//string i = f.GetValue(null).ToString();
string i = f.GetCustomAttributes(typeof(DisplayAttribute), true).Cast<DisplayAttribute>().Single().Name;
}
Как предлагается в комментариях, я постараюсь сделать это лучше с циклическим прохождением атрибутов вместо полей