C# 测试其他属性代码中的属性

C# 测试其他属性代码中的属性,c#,reflection,custom-attributes,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

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

假设您具有以下类定义:

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.Level是否具有RequiredAttribute?

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

protected override ValidationResult IsValid(object value, 
  ValidationContext validationContext)
{
  var requiredAttribute = validationContext.ObjectType
    .GetPropery(validationContext.MemberName)
    .GetCustomAttributes(true).OfType<RequiredAttribute>().SingleOrDefault();
}
受保护的覆盖验证结果有效(对象值,
ValidationContext(验证上下文)
{
var requiredAttribute=validationContext.ObjectType
.GetProperty(validationContext.MemberName)
.GetCustomAttributes(true).OfType().SingleOrDefault();
}

ooh!好的!我猜不,但这只是一个猜测。