例如,我有一个具有属性和属性的类:
[MyDisplay(Name = "Class name", Description = "Class description.")]
public class MyClass
{
[MyDisplay(Name = "Property name", Description = "Property description.")]
public int MyProperty { get; set; }
}
我想获取像
这样的属性值// Get type attribute...
string className = MyClass.Attributes.MyDisplay.Name;
// Get member attribute...
string propertyDescription =
MyClass.Properties.MyProperty.Attributes.MyDisplay.Description;
如何获得它?我希望代码能够使用属性数据自动填充MyClass的其他字段。访问属性值似乎非常方便,例如实例值 - 用于绑定等。
主要的复杂性是使用名称与属性和属性名称相同的对象填充MyClass.Attributes和MyClass.Properties集合。所以我认为这个系列必须是静态的。 MyClass.Properties集合中的每个对象也必须具有属性集合(例如,MyProperty.Attributes),如MyClass.Attributes集合。
答案 0 :(得分:0)
我不确定您要实现的目标,但是下面的代码将让您了解如何在运行时从程序集中提取属性数据。请注意,属性数据是每种类型的声明,而不是每个类型的实例。
foreach (var type in System.Reflection.Assembly.GetExecutingAssembly().GetTypes())
{
// class attributes
foreach (var typeAttr in type.GetCustomAttributes(typeof(DisplayAttribute), false))
{
Console.WriteLine(((DisplayAttribute)typeAttr).Name);
Console.WriteLine(((DisplayAttribute)typeAttr).Description);
}
// members attributes
foreach (var props in type.GetProperties())
{
foreach (var propsAttr in props.GetCustomAttributes(typeof(DisplayAttribute), false))
{
Console.WriteLine(((DisplayAttribute)propsAttr).Name);
Console.WriteLine(((DisplayAttribute)propsAttr).Description);
}
}
}