Рассмотрим следующий пользовательский атрибут:
[Abc.Text(MaxLength=33)]
public Abc.Text heading = new Abc.Text();
MaxLength определяется в классе TextAtrribute:
public class TextAttribute : Attribute
{
public int MaxLength {get; set;}
}
В другом моем коде класс Text должен знать свой MaxLength.
Есть ли способ, которым я мог бы сделать что-то вроде этого:
int max = (int)heading.GetAttribute("MaxLength");
Комментарии к ответам
Эта модификация ответа RexM сработала:
System.Reflection.FieldInfo headingField = this.GetType().GetField("heading");
object[] attribs = headingField.GetCustomAttributes(typeof(Abc.TextAttribute), true);
if (attribs.Length == 1)
{
int max = ((Abc.TextAttribute)attribs[0]).AbcMaxLength;
}
Но я надеялся, что смогу сделать это без ссылки на «этого», родителя поля.
Можете ли вы получить родителя поля как-нибудь? Это решило бы, например,
System.Reflection.FieldInfo headingField = heading.GetParent().GetType().GetField("heading");