从其他属性的代码中测试属性

时间:2012-05-16 19:32:00

标签: c# reflection custom-attributes

是否可以测试另一个属性的代码中是否存在属性?

假设您有以下类定义:

public class Inception {
    [Required]
    [MyTest]
    public int Levels { get; set; }
}
public class MyTestAttribute : ValidationAttribute {
    public override bool IsValid(object o){
        // return whether the property on which this attribute
        // is applied also has the RequiredAttribute
    }
}

... MyTestAttribute.IsValid是否可以确定Inception.Levels是否具有RequiredAttribute?

1 个答案:

答案 0 :(得分:3)

ValidationAttribute的特定情况下,它是可能的,但您必须使用具有上下文参数的其他IsValid重载。上下文可用于获取包含类型,还可以获取应用该属性的属性的名称。

protected override ValidationResult IsValid(object value, 
  ValidationContext validationContext)
{
  var requiredAttribute = validationContext.ObjectType
    .GetPropery(validationContext.MemberName)
    .GetCustomAttributes(true).OfType<RequiredAttribute>().SingleOrDefault();
}