0

我有一个用验证属性注释的属性。为什么在属性的 IsValid 方法之前调用属性的 setter,更重要的是如何在设置值之前对其进行验证?

这是一个草图代码模型,用于查看验证器属性的外观:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class MyAttribute: ValidationAttribute
{       
    public override bool IsValid(object value) 
    {
        ...
    }
}

以下是属性在属性上的使用方式:

[MyAttribute]
public string MyProperty
{
   get { ... }
   set { ... }
}
4

1 回答 1

1

我假设您在谈论命名空间ValidationAttribute内的内容DataAnnotations这些属性通常用于描述验证要求,没有任何特定的规定模型。

但是,在许多情况下,构造一个对象或一组对象是有意义的,然后调用询问“这现在有效吗?” - 因此,当然,在这种情况下,对您的IsValid方法的调用将在设置属性值之后发生。

通常,属性是被动的 - 直到某物以编程方式实际访问该属性并对其执行某些操作时,该属性中的任何代码都不会运行。没有通用的方法来编写一个属性,即“当调用此属性所附加到的成员时,首先运行这段代码”。

于 2012-04-27T07:55:46.043 回答