2011-01-18 6 views

risposta

15

Si potrebbe provare questo:


     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 ... bello, e posso scrivere System.ComponentModel.PropertyDescriptorCollection pdc = System.ComponentModel.TypeDescriptor.GetProperties (questo); nel mio costruttore da usare solo una volta ... grazie !! – Yuriy

0

Che ne dici di questo?

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

Penso che stai chiedendo se si può fare questo senza la stringa - cioè qualche altro token che rappresenta 'questa proprietà'. Non penso che esista. Ma visto che stai scrivendo questo codice comunque (?) Qual è la difficoltà nel mettere semplicemente il nome della proprietà nel codice?

+1

È questo il caso mi otterrò PropertyInfo ... ma ho bisogno di TypeConverter, DisplayName dalla mia proprietà .. – Yuriy

+0

anche io posso ottenere manualmente tutti gli attributi e trovare typeConverter, ma questa non è una buona idea – Yuriy

+0

anche io posso usare TypeDescriptor.GetProperties (this) e quindi eseguire su tutte le proprietà e trova quello che mi serve ... ma forse qualcosa di buono è già stato implementato ... e più rapidamente di quello che ho scritto .. – Yuriy

5

Ho trovato che il seguente lavorato:

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

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

dove PropertyName è un valore passato in un metodo.

7

Ecco una funzione di conversione riutilizzabile per coloro che ha ottenuto a questo post alla ricerca di una funzione generale:

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

ed ecco un metodo di estensione:

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