2009-05-27 10 views
9

Devo trovare il tipo di proprietà a cui è applicato un attributo personalizzato dall'attributo personalizzato.Come si ottiene la proprietà che appartiene a un attributo personalizzato?

Ad esempio:

[MyAttribute] 
string MyProperty{get;set;} 

Data l'istanza di MyAttribute, come avrei potuto ottenere un descrittore di tipo per MyProperty?

In altre parole, Cerco il contrario di System.Type.GetCustomAttributes()

+2

Forse starai meglio a dire quello che stai cercando di fare, perché ciò che stai chiedendo non è possibile. –

risposta

16

L'attributo in sé non conosce l'oggetto che è stato decorato con esso. Ma potresti iniettare queste informazioni nel momento in cui riattivi l'attributo.
A un certo punto è necessario recuperare la proprietà utilizzando il codice simile al seguente.

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

Pieni voti per la lettura della mente :-) –

+0

Avevo bisogno di questo per il mio problema e ho trovato [un'altra soluzione qui] (https://stackoverflow.com/questions/4879521/how-to-create-a-custom-attribute-in -c-sharp/44595783 # risposta-4.879.579). Ho elaborato questo aspetto e ho postato una risposta per l'accesso a un attributo personalizzato su una proprietà e non su una classe. Grazie, a proposito! – Hopper

4

L'attributo personalizzato non sa nulla circa l'elemento attribuito in modo non credo che ciò che si vuole è possibile fare a meno che non enumerare tutti i tipi nel proprio sistema e controllare se contengono tale attributo.

Problemi correlati