2010-06-24 21 views
5

Tôi muốn lấy một PropertyInfo, đây mã:tính Làm thế nào để có được lồng

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

nó hoạt động tốt nhưng nếu tôi muốn lấy tính lồng nhau, nó sẽ trả về null:

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

Is có cách nào để có được thuộc tính lồng nhau?

Best Regards,

Florian

Edit: Tôi có một vấn đề mới bây giờ, tôi muốn có được một tài sản mà là một mảng:

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

Cảm ơn bạn

Trả lời

7

Có:

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

Được gọi:

Đuổi để giành chiến thắng!

+0

Cảm ơn bạn! Tôi muốn biết cách nhận thuộc tính qua chỉ mục: thuộc tính chuỗiName = "DisplayLayout.Bands [0] .Columns"; PropertyInfo pi = control.GetType(). GetProperty (propertyName); – Florian

3

Just làm lại như vậy trên số PropertyType mà bạn vừa nhận được cho tài sản (và lặp lại thường xuyên nếu bạn cần):

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

Có, tôi đã quên bit PropertyType trong câu trả lời của mình. –

0

Bạn có thể làm điều đó, nhưng bạn phải làm "toàn bộ sự việc" cho mỗi cấp, có nghĩa là:

  • Nhận tài sản từ loại đối tượng của bạn
  • Lấy loại tài sản mà
  • Rửa và lặp lại :)
Các vấn đề liên quan