Pregunta

¿Cómo puedo obtener el PropertyDescriptor para la propiedad actual? Por ejemplo:

[MyAttribute("SomeText")]
public string MyProperty
{
    get{....}
    set
    {
        // here I want to get PropertyDescriptor for this property.
    }
}
¿Fue útil?

Solución

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

Otros consejos

Esta 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];
}

He encontrado que el siguiente trabajó:

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

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

donde PropertyName es un valor pasado en un método.

¿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 exista. Pero ya que usted está escribiendo el código de todos modos (?) ¿Cuál es la dificultad de sólo poner el nombre de la propiedad en el código?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top