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