У меня есть класс 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 не имеет атрибутов
РЕДАКТИРОВАТЬ
Я переместил атрибуты в определение интерфейса, поэтому мне нужно проанализировать унаследованные интерфейсы, чтобы найти их. Я могу это сделать, потому что класс 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));
}
}
}
}