2011-01-18 15 views

Respuesta

15

Usted podría intentar esto:


     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 ... bueno, y puedo escribir el System.ComponentModel.PropertyDescriptorCollection pdc = System.ComponentModel.TypeDescriptor.GetProperties (this); en mi constructor para usar solo una vez ... gracias !! – Yuriy

0

¿Qué tal esto?

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

creo que estás preguntando si se puede hacer esto sin la cadena - es decir, algún otro símbolo que representa 'esta propiedad'. No creo que eso exista. Pero dado que está escribiendo este código de todos modos (?), ¿Cuál es la dificultad de simplemente poner el nombre de la propiedad en el código?

+1

Es este caso voy a conseguir PropertyInfo ... pero necesito TypeConverter, DisplayName de mi propiedad ... – Yuriy

+0

también puedo obtener todos los atributos manualmente y encontrar typeConverter, pero esta no es buena idea – Yuriy

+0

también puedo usar TypeDescriptor.GetProperties (this) y luego ejecutar todas las propiedades y encuentra lo que necesito ... pero tal vez algo implementado ya se implementó ... y más rápido que el que escribí ... – Yuriy

5

me encontré con que trabajaron los siguientes:

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

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

donde PropertyName es un valor que se pasa en un método.

7

Aquí es una función de conversión reutilizable para los que llegó a este puesto en busca de una función general:

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

y aquí es un método de extensión:

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