2009-05-27 2 views
9

Мне нужно найти тип свойства, к которому применяется пользовательский атрибут из пользовательского атрибута.Как получить свойство, принадлежащее настраиваемому атрибуту?

Например:

[MyAttribute] 
string MyProperty{get;set;} 

Учитывая экземпляр MyAttribute, как я мог бы получить дескриптор типа для MyProperty?

Другими словами, я ищу противоположность System.Type.GetCustomAttributes()

+2

Возможно, вам лучше сказать, что вы пытаетесь сделать, потому что то, что вы просите, невозможно. –

ответ

16

Атрибут сам ничего не знает об объекте, который был украшен им. Но вы можете вводить эту информацию во время восстановления атрибута.
В какой-то момент вы должны получить свойство, используя код, похожий на следующий.

PropertyInfo propertyInfo = typeof(MyType).GetProperty("MyProperty"); 

Object[] attribute = propertyInfo.GetCustomAttributes(typeof(MyAttribute), true); 

if (attribute.Length > 0) 
{ 
    MyAttribute myAttribute = (MyAttribute) attributes[0]; 

    // Inject the type of the property. 
    myAttribute.PropertyType = propertyInfo.PropertyType; 

    // Or inject the complete property info. 
    myAttribute.PropertyInfo = propertyInfo; 
} 
+1

Полные оценки для чтения ума :-) –

+0

Мне это было нужно для моей проблемы, и я нашел [другое решение здесь] (https://stackoverflow.com/questions/4879521/how-to-create-a-custom-attribute-in -с-диез/44595783 # ответ-4879579). Я подробно остановился на этом и опубликовал ответ на доступ к пользовательскому атрибуту свойства, а не к классу. Спасибо, кстати! – Hopper

4

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