2013-05-17 3 views
0

Если у меня есть:.NET Атрибуты собственности

[SomeAttr] 
public Int32 SomeProperty 
{ 
    get; set; 
} 

Возможно ли SomeAttr сказать, что собственность это пришитые? По крайней мере, можно сказать, что Typeproperty есть?

+0

Где вы получаете список «SomeAttr»? Из какого типа нет? –

+0

Что вы имеете в виду? – Andrew

+0

Что вы пытаетесь достичь? –

ответ

0

Нет, вы не можете. Не напрямую.

Что вы можете сделать, в данный момент вы собираете атрибут, установлен этот атрибут с дополнительной информацией:

class SomeAttr: Attribute 
{ 
    public PropertyInfo Target {get;set;} 
} 

... и когда вы собрали информацию:

Type type = ... // The type which holds the property. 
PropertyInfo propertyInfo = typeo.GetProperty("SomeProperty"); 
Type propertyType = propertyInfo.PropertyType; 
SomeAttr attr = propertyInfo.GetCustomAttributes(false).OfType<SomeAttr>().FirstOrDefault(); 
attr.Target = propertyInfo; // <== Set the target information. 

Таким образом, вы всегда можете получить свой целевой элемент в другой точке вашего кода:

public void DoSomethingWithAttribute(SomeAttr attr) 
{ 
    PropertyInfo whichProperty = attr.Target; 
} 

(Вы также можете использовать базовый класс MemberInfo, чтобы поддерживать методы, поля и т. Д.)

+0

Похоже, мы разместили одновременно –

+0

@Frank: с разницей в 3 минуты. :) –

+0

Да, я знал, что могу идти в этом направлении, я просто надеялся на противоположное ... – Andrew

0

Нет. Вы можете сделать это только наоборот. Вы можете запросить свойство (через отражение), какие атрибуты он имеет:

Attribute.GetCustomAttributes (prop, true);

Где prop является объектом, производным от класса MemberInfo, который описывает свойство SomeProperty. Затем вы повторяете возвращаемые атрибуты, чтобы увидеть, включает ли он ваш.

Смежные вопросы