2014-02-10 69 views
1

我的CheckModelValidation方法(測試單個模型)在我的單元測試中測試了很好的效果,只是通過傳入類模型UserInsertModel作爲對象,但是當我嘗試在單元測試中將模型列表傳遞給CheckModelListValidation時,它告訴我這是一個unknown method(因爲它不喜歡我想通過的 - 這是一個List<UserInsertModel>)。如何將通用對象列表傳遞給方法?

有沒有更好的方法來做到這一點使用泛型(我剛剛進入)?

public class ValidationManager 
{ 
    public static void CheckModelListValidation(List<object> model) 
    { 
     string errorMessages = ""; 
     int iCnt = 0; 
     foreach (var u in model) 
     { 
      iCnt += 1; 
      string itemErrors = ValidateModel(u); 
      if (!string.IsNullOrEmpty(itemErrors)) 
      { 
       errorMessages = string.Format("Item {0} errors: {1}", iCnt, itemErrors); 
      } 
     } 
     if (!string.IsNullOrEmpty(errorMessages)) 
     { 
      throw new Exception(errorMessages); 
     } 
    } 

    public static void CheckModelValidation(object model) 
    { 
     string errorMessages = ValidateModel(model); 
     if (!string.IsNullOrEmpty(errorMessages)) 
     { 
      throw new Exception(errorMessages); 
     } 
    } 

    private static string ValidateModel(object model) 
    { 
     string errorMessages = ""; 
     List<ValidationResult> validationResults = new List<ValidationResult>(); 
     ValidationContext valContext = new ValidationContext(model, null, null); 
     bool isValid = Validator.TryValidateObject(model, valContext, validationResults, true); 
     if (!isValid) 
     { 
      errorMessages= string.Format("Errors: {0}", String.Join("; ", validationResults.Select(v => v.ErrorMessage).ToArray())); 
     } 
     return errorMessages; 
    } 
} 

下面是我的實現:

UserInsertModel model = new UserInsertModel(); 
model.EmailAddress = "test"; 

List<UserInsertModel> models = new List<UserInsertModel>(); 
models.Add(model); 
models.Add(model); 

ValidationManager.CheckModelListValidation(models); 

回答

2

你可以讓你的驗證類通用:

public class ValidationManager<T> 
{ 
    // Change methods to accept T instead of object 
    public static void CheckModelListValidation(List<T> model) 
    { 

    //... 

    public static void CheckModelValidation(T model) 
    { 
     // etc 
+0

你應該看到剛剛在我的頭上熄滅的巨型燈泡d關於泛型如何與全班同學共同工作的問題。它終於「點擊」哈哈一個問題,但是,應該(或可以)我把'CheckModelValidation(object model)'改成'CheckModelValidation( model)'?當它發生時,我會遇到很多錯誤。我不確定我的語法是否正確。 – RichC

+0

OOOOHH - 我剛剛看到你的編輯 - 我是一個假人。 T不是 RichC

+0

@RichC是的,只是'(T型)',而不是'':) –

2

變化的方法來簽名:

public static void CheckModelListValidation<T>(List<T> model) 
相關問題