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.
    }
}
Était-ce utile?

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 );

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
scroll top