C#PropertyInfo

时间:2011-06-14 15:02:12

标签: c#

我可以获得像

这样的PropertyValues
Type mytype=typeof(TextBox);

foreach(PropertyInfo myinfo in mytype.GetProperties())
{
ListBox1.Items.Add(myinfo.Name);
}

但有些属性有孩子如何找到I属性的子属性?

(示例Devexpress LookUpEdit组件DataSource,属性下的DisplayMember e.t.c属性)谢谢

6 个答案:

答案 0 :(得分:2)

为PropertyInfo.PropertyType.GetProperties执行相同的循环(递归)

答案 1 :(得分:1)

您可以使用PropertyType属性查找属性的类型,然后以检查TextBox的属性的相同方式,您可以检查这些子属性。

Type mytype=typeof(TextBox);
foreach(PropertyInfo myinfo in mytype.GetProperties())
{
    ListBox1.Items.Add(myinfo.Name);
    if(myinfo.Name == "Parent")
    {    
        PropertyInfo subProperty = typeof(Control).GetProperty("Name")
        if(subProperty != null)
            // Do some more stuff here
    }
}

答案 2 :(得分:1)

您需要访问myinfo对象的PropertyType属性,然后使用GetProperties()从那里获取子属性。

foreach(PropertyInfo myinfo in mytype.GetProperties())
{ 
    ListBox1.Items.Add(myinfo.Name);
    foreach(PropertyInfo mychildren in myinfo.PropertyType.GetProperties())
    {
       //do whatever with them
    }
}

答案 3 :(得分:1)

对一个获取属性并返回propertyinfo

的方法进行递归调用

答案 4 :(得分:1)

您想获取属性信息的类型,然后获取与该类型相关联的属性。

例如:

        PropertyInfo info = GetType().GetProperties()[0];
        Type inner = info.GetType();
        inner.GetProperties();

编辑: 我最初说的是info.GetType(),但实际上没有确定是对的,我道歉。只要你知道你期望什么,那么你就不需要任何递归

更简单的事应该可以正常工作:

PropertyInfo[] infos = typeof(SomeClass).GetProperties();
//Find the Property you are looking for
PropertyInfo propertyWithMoreProperties = ....

PropertyInfo[] moreInfos = propertyWidthMoreProperties.PropertyType.GetProperties();

答案 5 :(得分:0)

你可以打电话

 myInfo.PropertyType().GetProperties();

获取所有属性