2010-08-20 1 views
1

Создает пользовательский атрибут для моих свойств и задавался вопросом, знает ли кто-нибудь, как я могу получить доступ к значению Атрибута внутри get accessor.Доступ к атрибуту свойств внутри get accessor

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

Почему может» t вы просто возвращаете GUID из свойства? Зачем вам нужен пользовательский атрибут? – Timwi

+0

@Timwi, единственное преимущество, которое я мог видеть из атрибута, заключается в том, что вы можете проверить его без экземпляра построенного класса, но пользователи этого класса могут также получить его из живого экземпляра без необходимости прямого отражения. Не уверен, что это достаточно полезно, чтобы гарантировать сложность. –

+0

Его упрощенный пример: возвращаемое значение будет значением, загруженным из Guid, а не возвратом самого Guid. – philba888

ответ

0

Вы можете получить свойство, а затем его пользовательские атрибуты с помощью отражения, например:

// 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'? Вы имеете в виду 'var'? – Tomas

+0

@ Томас: Упс :) – Timwi

1

Откладывая мудрость такой вещи ...

public string MyProperty 
{ 
    get 
    { 
     return this.GetType().GetProperty("MyProperty").GetCustomAttributes(typeof(GuidAttribute), true).OfType<GuidAttribute>().First().Value; 
    } 
} 
Смежные вопросы