2016-02-02 3 views
3

Question. Existe-t-il un moyen d'obtenir une instance de CustomAttributeData en fonction de l'instance donnée de mon attribut personnalisé, par exemple, MyAttribute? Ou vice versa?Marcher de l'attribut vers CustomAttributeData ou vers l'arrière

Pourquoi ai-je besoin de cela? L'instance de MyAttribute contient des propriétés qui me intéressent, alors que l'instance de CustomAttributeData contient les paramètres du constructeur réels Je suis intéressé par Alors maintenant, je mets en œuvre un double travail:. premier, obtenir l'instance de MyAttribute en appelant

Attribute.GetCustomAttribute(property, typeof(MyAttribute)) as MyAttribute 

et secondes, obtenir l'instance de CustomAttributeData en appelant

CustomAttributeData.GetCustomAttributes(property) 

et marcher sur cette collection.

P. J'ai jeté un oeil sur this question, mais je n'y ai pas trouvé la solution désirée.

Répondre

1

Si je comprends bien votre question, vous avez déjà une instance de l'attribut personnalisé MyAttributeInstance, et vous souhaitez obtenir le CustomAttributeData pour cette même instance, de préférence en une seule étape.

Étant donné que vous avez déjà trouvé MyAttributeInstance et que vous l'attachez à une propriété (ou à une classe, ou ...), je suppose que vous avez la propriété disponible. Donc, cela pourrait peut-être travail pour vous:

CustomAttributeData CAD = property.GetCustomAttributesData().First(x => x.AttributeType == MyAttributeInstance.GetType()); 

Je pense que répond à votre question réelle. Cependant, je pense que votre intention peut être de demander comment obtenir le CustomAttributeData d'une propriété directement. Dans ce cas, essayez ceci:

CustomAttributeData CAD = property.GetCustomAttributesData().First(x => x.AttributeType == typeof(MyAttribute)); 
+0

Merci pour la réponse. Il me semble (je ne peux pas le rappeler exactement cependant) que ce que j'ai demandé était comment, ayant une instance de classe d'attribut, obtenir une instance de la classe CustomAttributeData. Dans ce cas votre réponse suggère seulement une autre manière d'obtenir une instance de la classe CustomAttributeData tout en ayant une instance de la classe PropertyInfo (l'autre manière a été proposée dans la question). – Hoborg