Как получить PropertyDescriptor для текущего свойства?

Как я могу получить PropertyDescriptor для свойства, где я? Например:

[MyAttribute("SomeText")]
public string MyProperty
{
get{....}
set
{
 // here I want to get propertyDecriptor for this property.
}
}

спасибо.

Ответ 1

Вы можете попробовать следующее:


        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

Здесь используется функция повторного использования конверсий для тех, кто попал на это сообщение, ища общую функцию:

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

и здесь используется метод расширения:

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

Ответ 3

Я обнаружил, что работало:

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

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

где PropertyName - значение, переданное в метод.

Ответ 4

Как насчет этого?

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

Я думаю, вы спрашиваете, можете ли вы сделать это без строки, т.е. какой-нибудь другой токен, который представляет это свойство. Я не думаю, что это существует. Но так как вы пишете этот код в любом случае (?), В чем заключается трудность просто поместить имя свойства в код?