通过属性动态添加项目到列表框



我有3个类(都从相同的基类派生),我必须动态地填充一个列表框与属性名称。

我已经试过了

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的所有属性并从NameAttributeName属性中获得字符串?

您可以检查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);
}

顺便说一下,我还建议将该属性声明为仅在AttributeUsage装饰中使用AllowMultiple = false

相关内容

  • 没有找到相关文章

最新更新