Como llegar a la propiedad PropertyDescriptor actual?
-
12-10-2019 - |
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.
}
}
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