2009-05-27 8 views
9

J'ai besoin de trouver le type de la propriété à laquelle un attribut personnalisé est appliqué à partir de l'attribut personnalisé.Comment obtenir la propriété appartenant à un attribut personnalisé?

Par exemple:

[MyAttribute] 
string MyProperty{get;set;} 

Compte tenu de l'instance de MyAttribute, comment pourrais-je obtenir un descripteur de type pour MyProperty?

En d'autres termes, je suis à la recherche à l'opposé de System.Type.GetCustomAttributes()

+2

Vous pourriez être mieux de dire ce que vous essayez de faire, parce que ce que vous demandez n'est pas possible. –

Répondre

16

L'attribut lui-même ne connaît rien de l'objet qui a été décoré avec. Mais vous pouvez injecter cette information au moment où vous récupérez l'attribut.
À un certain point, vous devez récupérer la propriété en utilisant un code similaire au suivant.

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

Plein de points pour la lecture de l'esprit :-) –

+0

J'avais besoin de ceci pour mon problème et j'ai trouvé [une autre solution ici] (https://stackoverflow.com/questions/4879521/how-to-create-a-custom-attribute-in -c-sharp/44595783 # answer-4879579). J'ai élaboré à ce sujet et posté une réponse pour accéder à un attribut personnalisé sur une propriété et non une classe, aussi. Merci, au fait! – Hopper

4

L'attribut personnalisé ne sait rien sur l'élément attribué, donc je ne pense pas que ce que vous voulez est possible de le faire à moins que vous énumérer tous les types dans votre système et vérifier s'ils contiennent un tel attribut.

Questions connexes