首页 >后端开发 >C++ >如何使用.NET中的IvalidatableObject实施条件属性验证?

如何使用.NET中的IvalidatableObject实施条件属性验证?

Susan Sarandon
Susan Sarandon原创
2025-01-28 11:41:39874浏览

How to Implement Conditional Property Validation Using IValidatableObject in .NET?

使用ivalidatableObject

> IValidatableObject接口提供了一种在.NET中执行综合对象验证的有力方法,包括交叉特性检查。但是,基于某些条件的选择性忽略验证规则可能很棘手。 此示例演示了如何有效地实现条件性属性验证。

以下是一个代码段,说明了实现:

<code class="language-csharp">public class ValidateMe : IValidatableObject
{
    [Required]
    public bool Enable { get; set; }

    [Range(1, 5)]
    public int Prop1 { get; set; }

    [Range(1, 5)]
    public int Prop2 { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        var results = new List<ValidationResult>();
        if (Enable)
        {
            // Conditionally validate Prop1 and Prop2
            Validator.TryValidateProperty(Prop1, new ValidationContext(this, null, null) { MemberName = "Prop1" }, results);
            Validator.TryValidateProperty(Prop2, new ValidationContext(this, null, null) { MemberName = "Prop2" }, results);

            // Add a custom conditional validation rule
            if (Prop1 > Prop2)
            {
                results.Add(new ValidationResult("Prop1 must be less than or equal to Prop2"));
            }
        }
        return results;
    }
}</code>

此代码使用Enable属性来控制验证。 如果Enable为true,则使用Prop1>属性验证Prop2>> [Range] Prop1>确保Prop2>的自定义规则不大于Validator.TryValidateProperty()>。 results方法是关键;它仅在验证失败时将验证错误添加到

列表中。

>

使用此验证:
<code class="language-csharp">public void PerformValidation()
{
    var toValidate = new ValidateMe
    {
        Enable = true,
        Prop1 = 6,  //This will cause a validation error
        Prop2 = 2
    };

    bool validateAllProperties = false; // Important: Set to false for conditional validation

    var results = new List<ValidationResult>();
    bool isValid = Validator.TryValidateObject(toValidate, new ValidationContext(toValidate, null, null), results, validateAllProperties);

    //Process validation results (results list)
}</code>

validateAllProperties设置falseValidator.TryValidateObject()至关重要。 这样可以防止IValidatableObject覆盖条件验证逻辑。 此方法结合了.NET应用程序中灵活和可靠的对象验证的有条件验证。

以上是如何使用.NET中的IvalidatableObject实施条件属性验证?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn