2008-10-15 8 views
1

Est-il possible d'obtenir les attributs personnalisés d'un objet spécifique que je reçois dans une méthode?Récupère les attributs personnalisés d'un membre spécifique

Je ne veux ni ne peux itérer sur Type.GetMembers() et rechercher mon membre. J'ai l'objet, qui est aussi un membre, qui a l'attribut.

Comment obtenir l'attribut?

class Custom 
{ 
    [Availability] 
    private object MyObject = "Hello"; 

    private void Do(object o) 
    { 
     //does object 'o' has any custom attributes of type 'Availability'? 
    } 

    //somewhere I make the call: Do(MyObject) 

} 

Répondre

2

No. Les objets ne sont pas des attributs - membres font. Au moment où vous êtes dans la méthode "Do", il n'y a aucun enregistrement du fait que vous avez appelé Do (MyObject) vs Do (MyOtherFieldWhichHasTheSameValue).

Si vous avez besoin de rechercher les attributs d'un membre, il vous faudra essentiellement passer le MemberInfo correspondant, pas ce à quoi il doit arriver.

+0

J'ai pensé à cela, mais j'espérais aussi qu'il y avait une façon intelligente d'obtenir les attributs, encore. Merci. –

1

Vous ne pouvez pas faire cela sans au moins 1 appel de réflexion. Après cela, enregistrez la valeur en quelque sorte.

Exemple:

abstract MyBase 
{ 
    public string Name; 
    protected MyBase() 
    { 
    //look up value of Name attribute and assign to Name 
    } 
} 

[Name("Foo")] 
class MyClass : MyBase 
{ 
} 
Questions connexes