目前,我正在研究一个有趣的硬编码数据结构。请不要像为此创建表格那样回答。可以肯定的是,我会把它给自己,但是我的好奇心太大了:)。
这是我用来创建下拉列表的主要枚举
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;
}
如评论中所建议,我将尝试通过遍历属性而不是字段来做得更好