如何通过FieldInfo获取Enum显示名称属性

时间:2019-01-09 04:05:39

标签: c# reflection enums

目前,我正在研究一个有趣的硬编码数据结构。请不要像为此创建表格那样回答。可以肯定的是,我会把它给自己,但是我的好奇心太大了:)。

这是我用来创建下拉列表的主要枚举

public enum ImportParamTypeEnum
{
    [Display(Name = "none")]
    None = 0,
    [Display(Name = "Produkty")]
    Product = 1,
    [Display(Name = "Test")]
    Test = 2,
}

以下枚举是以上选择的系统参数。例如,如果我在ImportParamTypeEnum.Product中选择了dropdown,那么我在视图上将显示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);
}

这段代码很好用,但是我不想使用Enum的Values,而是使用Display name属性。

问题

如何在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;
}

如评论中所建议,我将尝试通过遍历属性而不是字段来做得更好

0 个答案:

没有答案
相关问题