我有3个类(都来自相同的基类),我必须使用Property-Names动态填充ListBox。
我试过这样的
class Test : TestBase {
[NameAttribute("Name of the Person")]
public string PersonName { get; set; }
private DateTime Birthday { get; set; }
[NameAttribute("Birthday of the Person")]
public string PersonBDay {
get {
return this.bDay.ToShortDateString();
}
}
}
...
[AttributeUsage(AttributeTargets.Property)]
public class NameAttribute : Attribute {
public string Name { get; private set; }
public NameAttribute(string name) {
this.Name = name;
}
}
是否有可能在我的对象中查找具有属性NameAttribute
的所有属性,并从Name
的{{1}}属性中获取字符串?
答案 0 :(得分:2)
您可以检查Type.GetProperties
中的每个属性,然后使用MemberInfo.GetCustomAttributes
方法过滤具有所需属性的属性。
使用一点LINQ,这看起来像:
var propNameTuples = from property in typeof(Test).GetProperties()
let nameAttribute = (NameAttribute)property.GetCustomAttributes
(typeof(NameAttribute), false).SingleOrDefault()
where nameAttribute != null
select new { Property = property, nameAttribute.Name };
foreach (var propNameTuple in propNameTuples)
{
Console.WriteLine("Property: {0} Name: {1}",
propNameTuple.Property.Name, propNameTuple.Name);
}
顺便说一句,我还建议将属性声明为仅在AllowMultiple = false
装饰中使用AttributeUsage
一次使用。