2010-06-24 10 views
5

Chcę odzyskać PropertyInfo, oto kod:Jak uzyskać zagnieżdżone właściwości

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

to działa dobrze, ale jeśli chcę odzyskać właściwości zagnieżdżonych, zwraca wartość null:

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

Czy istnieje jakiś sposób, aby uzyskać zagnieżdżone właściwości?

Pozdrawiam,

Florian

Edit: Mam nowy problem teraz, chcę, aby uzyskać właściwość, która jest tablicą:

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

Dziękuję

Odpowiedz

7

Tak:

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); 
} 

Called:

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

Recursion o zwycięstwo!

+0

Dziękujemy! Chcę wiedzieć, jak uzyskać właściwość za pośrednictwem indeksu: string propertyName = "DisplayLayout.Bands [0] .Columns"; PropertyInfo pi = control.GetType(). GetProperty (propertyName); – Florian

3

Tylko zrób to samo na PropertyType, który właśnie dostałeś dla nieruchomości (i powtarzaj tak często, jak potrzebujesz):

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

Tak, zapomniałem bit PropertyType w mojej odpowiedzi. –

0

Można to zrobić, ale trzeba zrobić „całość” na każdym poziomie, co oznacza:

  • Get właściwość od typu obiektu
  • Uzyskaj typ tej właściwości
  • spłukać i powtórzyć :)
Powiązane problemy