Допустим, у меня есть два класса, базовый класс имеет настраиваемый атрибут:
[MyAttribute]
public class BaseModel
{
public string Id { get; set; }
public string Name { get; set; }
}
public class InheritedModel : BaseModel
{
public string CompanyName { get; set; }
public int Amount { get; set; }
}
Когда я работаю с унаследованным классом, например
// member.DeclaringType is InheritedModel
if (member.DeclaringType.GetCustomAttributes(typeof(MyAttribute)).Any())
{
// returns true
}
Я ожидаю, что это должно быть false
, потому что InheritedModel
не имеет атрибута MyAttribute
напрямую.
Это правильное поведение? Как я могу разделить родителей и наследников в условии выше?
Возможный дубликат Как работает наследование для атрибутов?
GetCustomAttributes имеет перегрузку, которая позволяет вам указать, хотите ли вы также искать классы-предки.
Кажется, по умолчанию используется true
(хотя в документах об этом не сказано), поэтому попробуйте передать false
member.DeclaringType.GetCustomAttributes(typeof(MyAttribute), false).Any()
Вы можете изменить это поведение, установив
Inherited = false
в AttributeUsage.