3

我正在尝试列出Item可能包含的可能类型。但是我被困在我不能调用 Item.GetType() 来循环它的属性,因为这只会返回它已经包含的类型的属性。

我已经尝试过TypeDescriptor.GetProperties(...)但 Attributes 容器仅包含一个XmlElementAttribute实例,它是最后一个应用于属性的实例(在本例中为 WindowTemplate)

这一定是微不足道的,但我在网上找不到任何解决我的问题的方法。

    [System.Xml.Serialization.XmlElementAttribute("ChildTemplate", typeof(ChildTmpl), Order = 1)]
    [System.Xml.Serialization.XmlElementAttribute("WindowTmeplate", typeof(WindowTmpl), Order = 1)]
    public object Item
    {
        get
        {
            return this.itemField;
        }
        set
        {
            this.itemField = value;
        }
    }
4

1 回答 1

8

您不能为此使用 TypeDescriptor,因为 System.ComponentModel 总是折叠属性。您必须使用PropertyInfoand Attribute.GetCustomAttributes(property, attributeType)

var property = typeof (Program).GetProperty("Item");
Attribute[] attribs = Attribute.GetCustomAttributes(
       property, typeof (XmlElementAttribute));

如果它更容易,该数组实际上将是 a :XmlElementAttribute[]

XmlElementAttribute[] attribs = (XmlElementAttribute[])
     Attribute.GetCustomAttributes(property, typeof (XmlElementAttribute));
于 2011-10-11T22:44:41.533 回答