Comment obtenir PropertyDescriptor pour les biens en cours?
-
12-10-2019 - |
Question
Comment puis-je obtenir le PropertyDescriptor
pour la propriété actuelle? Par exemple:
[MyAttribute("SomeText")]
public string MyProperty
{
get{....}
set
{
// here I want to get PropertyDescriptor for this property.
}
}
La solution
Vous pouvez essayer ceci:
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 ];
}
}
Autres conseils
Voici une fonction de conversion réutilisable pour ceux qui est arrivé à ce poste à la recherche d'une fonction générale:
public static PropertyDescriptor GetPropertyDescriptor(PropertyInfo PropertyInfo)
{
return TypeDescriptor.GetProperties(PropertyInfo.DeclaringType).Item(PropertyInfo.Name);
}
et voici une méthode d'extension:
public static PropertyDescriptor PropertyDescriptor(this PropertyInfo propertyInfo)
{
return TypeDescriptor.GetProperties(propertyInfo.DeclaringType)[propertyInfo.Name];
}
Je trouve que la suivante a fonctionné:
// get property descriptions
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties ( this );
// get specific descriptor
PropertyDescriptor property = properties.Find ( PropertyName, false );
où PropertyName
est une valeur passée dans un procédé.
Comment cela?
this.GetType().GetProperty("MyProperty")
Je pense que vous vous demandez si vous pouvez le faire sans la chaîne - à savoir un autre jeton qui représente «cette propriété. Je ne pense pas que cela existe. Mais puisque vous écrivez ce code de toute façon (?) Quelle est la difficulté à simplement mettre le nom de la propriété dans le code?
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow