2011-01-18 11 views

Odpowiedz

15

Można spróbować to:


     public string Test 
     { 
      get 
      { 
       //Get properties for this 
       System.ComponentModel.PropertyDescriptorCollection pdc = System.ComponentModel.TypeDescriptor.GetProperties(this); 

       //Get property descriptor for current property 
       System.ComponentModel.PropertyDescriptor pd = pdc[ System.Reflection.MethodBase.GetCurrentMethod().Name ]; 
      } 
     } 
+2

ou ... ładne, i mogę napisać System.ComponentModel.PropertyDescriptorCollection pdc = System.ComponentModel.TypeDescriptor.GetProperties (this); w moim konstruktorze użyć tylko raz ... dzięki !! – Yuriy

0

Co z tym?

this.GetType().GetProperty("MyProperty") 

Myślę, że pytasz, czy możesz to zrobić bez łańcucha - tj. Jakiś inny token reprezentujący "tę właściwość". Nie sądzę, że istnieje. Ale skoro i tak piszesz ten kod (?), Jaka jest trudność w umieszczeniu nazwy nieruchomości w kodzie?

+1

Czy to przypadek Wezmę PropertyInfo ... ale potrzebuję TypeConverter, DisplayName z mojej właściwości .. – Yuriy

+0

również mogę ręcznie uzyskać wszystkie atrybuty i znaleźć typeConverter, ale to nie jest dobry pomysł – Yuriy

+0

również mogę użyć TypeDescriptor.GetProperties (this), a następnie uruchomić na wszystkich właściwościach i znajdź to, czego potrzebuję ... ale może coś już zostało zaimplementowane ... i szybciej niż to napisałem .. – Yuriy

5

okazało się, że pracował następuje:

 // get property descriptions 
     PropertyDescriptorCollection properties = TypeDescriptor.GetProperties (this); 

     // get specific descriptor 
     PropertyDescriptor property = properties.Find (PropertyName, false); 

gdzie PropertyName jest wartość przekazana do metody.

7

Oto wielokrotnego użytku funkcja konwersji dla tych, którzy dostali się do tego postu szuka ogólną funkcję:

public static PropertyDescriptor GetPropertyDescriptor(PropertyInfo PropertyInfo) 
{ 
    return TypeDescriptor.GetProperties(PropertyInfo.DeclaringType).Item(PropertyInfo.Name); 
} 

i oto metodę rozszerzenia:

public static PropertyDescriptor PropertyDescriptor(this PropertyInfo propertyInfo) 
{ 
    return TypeDescriptor.GetProperties(propertyInfo.DeclaringType)[propertyInfo.Name]; 
} 
Powiązane problemy