2016-03-31 11 views
0

C# WinForms uygulamasında, koleksiyondaki birden çok nesnenin, her bir nesnede işlevler çağrılmadan önce geçerli olması gerekiyor.ValidationResult sınıfı, bir nesnenin durumunu doğrularken uygun mu?

Bazı araştırmalar yaptım ve bir ValidationResult sınıfı var. Bu sınıf, bazı özellikler geçersiz gibi bir nesneyle ilgili doğrulama verileri döndürmek için uygun mu, yoksa kullanılması gereken başka bir sınıf var mı?

cevap

1

RequiredAttribute'u System.ComponentModel.DataAnnotations ad alanından kullanabilirsiniz. o kadar gibi boş değilse doğrulamak için bir mülk üstünde bu niteliği koyun:

using System.ComponentModel.DataAnnotations; 
public class MyDto 
{ 
    [Required] 
    public SomeObject SomeProperty { get; set; } 
} 

Aynı şekilde bu ad alanından more validation attributes kullanabilirsiniz.

Ayrıca, ValidationAttribute'dan devraldığınızda kendi doğrulama özniteliklerinizi oluşturabilirsiniz. bir liste içindeki her nesneyi doğrulayan bir Doğrulama nitelik Örneğin, gibi bir şey:

[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)] 
    public class ValidateCollectionAttribute : ValidationAttribute 
    { 
     protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
     { 
      var collection = value as IEnumerable; 

      if (collection != null) 
      { 
       foreach (object element in collection) 
       { 
        //do validation 
       } 
      } 

      return ValidationResult.Success; 
     } 
    } 

Sonraki size nesneyi doğrulamak için Validator sınıfını kullanabilirsiniz. Ben null ile MyDto nesne örneği ettik beri mülkiyet var için, ValidatorRequired özniteliği tarafından tetiklenen oldu bir ValidationResult dönecektir

var instance = new MyDto { SomeProperty = null }; //note that I'm setting the property to null, while the property has the Required attribute 
var context = new ValidationContext(instance); 
var validationResults = new List<ValidationResult>(); //this list will contain all validation results 
Validator.TryValidateObject(instance, context, validationResults, validateAllProperties: true); 
var errors = validationResults.Where(r => r != ValidationResult.Success); //filter out all successful results since we are only interested in errors 
if (errors.Any()) 
{ 
    //do whatever you like to do 
} 

: Sen öylesine gibi, içine örneğini koymak bir ValidationContext oluşturmanız gerekir .

Bu tür bir kodu yürüten bir hizmet oluşturabilir veya kodunuzu arka planda sabitleyebilirsiniz. Tekneni ne olursa olsun.

İlgili konular