Если у меня есть:.NET Атрибуты собственности
[SomeAttr]
public Int32 SomeProperty
{
get; set;
}
Возможно ли SomeAttr
сказать, что собственность это пришитые? По крайней мере, можно сказать, что Type
property
есть?
Если у меня есть:.NET Атрибуты собственности
[SomeAttr]
public Int32 SomeProperty
{
get; set;
}
Возможно ли SomeAttr
сказать, что собственность это пришитые? По крайней мере, можно сказать, что Type
property
есть?
Нет, вы не можете. Не напрямую.
Что вы можете сделать, в данный момент вы собираете атрибут, установлен этот атрибут с дополнительной информацией:
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
, чтобы поддерживать методы, поля и т. Д.)
Похоже, мы разместили одновременно –
@Frank: с разницей в 3 минуты. :) –
Да, я знал, что могу идти в этом направлении, я просто надеялся на противоположное ... – Andrew
Нет. Вы можете сделать это только наоборот. Вы можете запросить свойство (через отражение), какие атрибуты он имеет:
Attribute.GetCustomAttributes (prop, true);
Где prop является объектом, производным от класса MemberInfo, который описывает свойство SomeProperty. Затем вы повторяете возвращаемые атрибуты, чтобы увидеть, включает ли он ваш.
Где вы получаете список «SomeAttr»? Из какого типа нет? –
Что вы имеете в виду? – Andrew
Что вы пытаетесь достичь? –