Как получить недвижимость для текущего имущества?
-
12-10-2019 - |
Вопрос
Как я могу получить PropertyDescriptor
Для текущего имущества? Например:
[MyAttribute("SomeText")]
public string MyProperty
{
get{....}
set
{
// here I want to get PropertyDescriptor for this property.
}
}
Решение
Вы можете попробовать это:
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 ];
}
}
Другие советы
Вот повторная функция преобразования для тех, кто попал в этот пост, ищущий общую функцию:
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];
}
Я обнаружил, что следующее сработало:
// get property descriptions
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties ( this );
// get specific descriptor
PropertyDescriptor property = properties.Find ( PropertyName, false );
куда PropertyName
это значение, передаваемое в метод.
Как насчет этого?
this.GetType().GetProperty("MyProperty")
Я думаю, что вы спрашиваете, можете ли вы сделать это без строки - т.е. какой -то другой токен, который представляет «это свойство». Я не думаю, что это существует. Но так как вы в любом случае пишете этот код (?) Какова сложность в том, чтобы просто поместить имя собственности в коде?
Не связан с StackOverflow