是否可以测试另一个属性的代码中是否存在属性?
假设您有以下类定义:
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?
答案 0 :(得分:3)
在ValidationAttribute
的特定情况下,它是可能的,但您必须使用具有上下文参数的其他IsValid
重载。上下文可用于获取包含类型,还可以获取应用该属性的属性的名称。
protected override ValidationResult IsValid(object value,
ValidationContext validationContext)
{
var requiredAttribute = validationContext.ObjectType
.GetPropery(validationContext.MemberName)
.GetCustomAttributes(true).OfType<RequiredAttribute>().SingleOrDefault();
}