Maison >développement back-end >C++ >Comment implémenter la validation conditionnelle dans ivalidAtableObject avec les attributs au niveau de la propriété et l'ignorance basée sur le scénario?
Implémentez la vérification conditionnelle dans ivalidAtableObject: caractéristiques de niveau d'attribut et ignoration de la scène
Question:
Je sais que peut être utilisé pour la vérification des objets lors de la comparaison des attributs. Cependant, j'espère utiliser des attributs pour vérifier un seul attribut et ignorer des attributs spécifiques dans certains scénarios. Mon implémentation ci-dessous est-elle incorrecte?
Réponse: IValidatableObject
<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) { if (!this.Enable) { // 在此处返回有效结果。 // 如果整个对象未“启用”,我不关心 Prop1 和 Prop2 是否超出范围 } else { // 在此处检查 Prop1 和 Prop2 是否满足其范围要求 // 并相应地返回。 } } }</code>peut être améliorée pour mettre en œuvre les conditions requises. Ce qui suit est une méthode alternative:
utilise , uniquement lorsque la vérification échoue, le résultat de vérification sera ajouté à la collection
. Si la vérification est réussie, elle ne sera pas ajoutée, ce qui signifie le succès.Vérification de l'exécution:
<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 (this.Enable) { Validator.TryValidateProperty(this.Prop1, new ValidationContext(this, null, null) { MemberName = "Prop1" }, results); Validator.TryValidateProperty(this.Prop2, new ValidationContext(this, null, null) { MemberName = "Prop2" }, results); // 其他一些随机测试 if (this.Prop1 > this.Prop2) { results.Add(new ValidationResult("Prop1 必须大于 Prop2")); } } return results; } }</code>
Validator.TryValidateProperty()
Définir sur results
pour s'assurer que seuls les attributs d'attributs
sont autorisées à vérifier.
<code class="language-csharp">public void DoValidation() { var toValidate = new ValidateMe() { Enable = true, Prop1 = 1, Prop2 = 2 }; bool validateAllProperties = false; var results = new List<ValidationResult>(); bool isValid = Validator.TryValidateObject( toValidate, new ValidationContext(toValidate, null, null), results, validateAllProperties); }</code>Cette réponse révisée maintient l'image d'origine et fournit une explication plus concise et précise de l'exemple de code, en se concentrant sur les améliorations clés et en classant le but de
.. les blocs de code sont également formatés pour une meilleure lisibilité. >
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!