2011-01-18 4 views

ответ

15

Вы можете попробовать это:


     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

ou ... nice, и я могу написать System.ComponentModel.PropertyDescriptorCollection pdc = System.ComponentModel.TypeDescriptor.GetProperties (это); в моем конструкторе использовать тогда только один раз ... спасибо !! – Yuriy

0

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

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

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

+1

Является ли этот случай я получу PropertyInfo ... но мне нужен TypeConverter, DisplayName из моего свойства .. – Yuriy

+0

также могу вручную получить все атрибуты и найти typeConverter, но это не очень хорошая идея. – Yuriy

+0

также могу использовать TypeDescriptor.GetProperties (это), а затем запустить все свойства и найти то, что мне нужно ... но, возможно, что-то buit-in уже было реализовано ... и быстрее, чем я написал. – Yuriy

5

Я обнаружил, что следующие работал:

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

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

где PropertyName это значение передается в метод.

7

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

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]; 
} 
Смежные вопросы