2010-08-20 11 views
1

Je crée un attribut personnalisé pour mes propriétés et je me demandais si quelqu'un savait comment accéder à la valeur de l'attribut à l'intérieur de l'accesseur get.Accès à l'attribut properties à l'intérieur de l'accesseur get

public class MyClass 
{ 
    [Guid("{2017ECDA-2B1B-45A9-A321-49EA70943F6D}")] 
    public string MyProperty 
    { 
     get { return "value loaded from guid"; } 
    } 
} 
+1

Pourquoi peut » t vous venez de retourner le GUID de la propriété? Pourquoi avez-vous besoin d'utiliser un attribut personnalisé? – Timwi

+0

@Timwi, le seul avantage que je pouvais voir d'un attribut est que vous pouviez l'inspecter sans qu'une instance de la classe ne soit construite, mais les utilisateurs de la classe pouvaient également l'obtenir depuis une instance live sans avoir à utiliser directement la réflexion. Je ne sais pas si c'est suffisamment bénéfique pour justifier la complexité. –

+0

C'est un exemple simplifié, la valeur retournée sera une valeur chargée depuis le Guid, et non le Guid lui-même. – philba888

Répondre

0

Vous pouvez récupérer la propriété et ses attributs personnalisés par réflexion, comme ceci:

// Get the property 
var property = typeof(MyClass).GetProperty("MyProperty"); 

// Get the attributes of type “GuidAttribute” 
var attributes = property.GetCustomAttributes(typeof(GuidAttribute), true); 

// If there is an attribute of that type, return its value 
if (attributes.Length > 0) 
    return ((GuidAttribute) attributes[0]).Value; 

// Otherwise, we’re out of luck! 
return null; 
+0

'my'? Tu veux dire 'var'? – Tomas

+0

@Tomas: Oups :) – Timwi

1

Abstraction faite de la sagesse d'une telle chose ...

public string MyProperty 
{ 
    get 
    { 
     return this.GetType().GetProperty("MyProperty").GetCustomAttributes(typeof(GuidAttribute), true).OfType<GuidAttribute>().First().Value; 
    } 
}