2009-05-27 12 views
9

Potrzebuję znaleźć typ właściwości, do której stosuje się atrybut niestandardowy z poziomu niestandardowego atrybutu.Jak uzyskać właściwość należącą do niestandardowego atrybutu?

Na przykład:

[MyAttribute] 
string MyProperty{get;set;} 

względu na wystąpienie MyAttribute, jak mogę dostać deskryptor Type dla myProperty?

Innymi słowy, szukam przeciwieństwo System.Type.GetCustomAttributes()

+2

Lepiej możesz powiedzieć, co próbujesz zrobić, ponieważ to, o co prosisz, nie jest możliwe. –

Odpowiedz

16

Sam atrybut nie wie nic o przedmiocie, który został mu ozdobiony. Ale możesz wprowadzić te informacje w momencie, gdy pobierzesz atrybut.
W pewnym momencie musisz odzyskać właściwość za pomocą kodu podobnego do poniższego.

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

Pełne oceny do czytania :-) –

+0

Potrzebowałem tego dla mojego problemu i znalazłem [inne rozwiązanie tutaj] (https://stackoverflow.com/questions/4879521/how-to-create-a-ustom-attribute-in -c-sharp/44595783 # answer-4879579). Omówiłem to i wysłałem odpowiedź dotyczącą dostępu do niestandardowego atrybutu dla właściwości, a nie dla klasy. Dziękuję, przy okazji! – Hopper

4

atrybut niestandardowy wie nic o nadana elementu więc nie sądzę, co chcesz, jest możliwe do zrobienia chyba że wyliczyć wszystkie typy w systemie i sprawdzić, czy zawierają taki atrybut.

Powiązane problemy