У меня есть класс Bar такой:
class Foo : IFoo {
[Range(0,255)]
public int? FooProp {get; set}
}
class Bar : IFoo
{
private Foo foo = new Foo();
public int? FooProp { get { return foo.FooProp; }
set { foo.FooProp= value; } }
}
Мне нужно найти атрибут [Range (0,255)], отражающий ТОЛЬКО свойство Bar.FooProp. Я имею в виду, реквизит оформлен в экземпляре класса (.. new Foo ()), а не в классе, когда я в данный момент выполняю синтаксический анализ. Infact Bar.FooProp не имеет атрибутов
EDIT
Я переместил атрибуты в определение интерфейса, поэтому мне нужно проанализировать унаследованные интерфейсы, чтобы найти их. Я могу сделать это, потому что класс Bar должен реализовывать IFoo. В этом конкретном случае мне повезло, но проблема остается, когда у меня нет интерфейсов ... Я приму к сведению в следующий раз
foreach(PropertyInfo property in properties)
{
IList<Type> interfaces = property.ReflectedType.GetInterfaces();
IList<CustomAttributeData> attrList;
foreach(Type anInterface in interfaces)
{
IList<PropertyInfo> props = anInterface.GetProperties();
foreach(PropertyInfo prop in props)
{
if(prop.Name.Equals(property.Name))
{
attrList = CustomAttributeData.GetCustomAttributes(prop);
attributes = new StringBuilder();
foreach(CustomAttributeData attrData in attrList)
{
attributes.AppendFormat(ATTR_FORMAT,
GetCustomAttributeFromType(prop));
}
}
}
}