2010-06-24 11 views
5

que quieren recuperar un PropertyInfo, aquí el código:propiedades Cómo conseguir anidados

string propertyName="Text"; 
PropertyInfo pi = control.GetType().GetProperty(propertyName); 

funciona bien, pero si quiero recuperar las propiedades anidadas, se devuelve un valor nulo:

string propertyName="DisplayLayout.Override.RowSelectors"; 
PropertyInfo pi = control.GetType().GetProperty(propertyName); 

Es Hay alguna forma de obtener propiedades anidadas?

Best Regards,

Florian

Edit: Tengo un nuevo problema ahora, quiero conseguir una propiedad que es una matriz:

string propertyName="DisplayLayout.Bands[0].Columns"; 
PropertyInfo pi = control.GetType().GetProperty(propertyName) 

Gracias

Respuesta

7

Sí:

public PropertyInfo GetProp(Type baseType, string propertyName) 
{ 
    string[] parts = propertyName.Split('.'); 

    return (parts.Length > 1) 
     ? GetProp(baseType.GetProperty(parts[0]).PropertyType, parts.Skip(1).Aggregate((a,i) => a + "." + i)) 
     : baseType.GetProperty(propertyName); 
} 

solicitados:

PropertyInfo pi = GetProp(control.GetType(), "DisplayLayout.Override.RowSelectors"); 

recursividad por la victoria!

+0

¡Gracias! Quiero saber cómo obtener una propiedad a través de un indexor: string propertyName = "DisplayLayout.Bands [0]. Columnas"; PropertyInfo pi = control.GetType(). GetProperty (propertyName); – Florian

3
Sólo

haga lo mismo otra vez en el PropertyType que acaba de obtener para la propiedad (y repita tantas veces como lo necesite):

PropertyInfo property = GetType().GetProperty(propertyName); 
PropertyInfo nestedProperty = property.PropertyType.GetProperty(nestedPropertyName) 
+0

Sí, olvidé el bit de Property Type en mi respuesta. –

0

Puede hacerlo, pero hay que hacer "lo general" para cada nivel, lo que significa:

  • obtener la propiedad de su objeto de tipo
  • Obtener el tipo de esa propiedad
  • Enjuague y repita :)
Cuestiones relacionadas