gpt4 book ai didi

c# - 如何将通用对象列表传递给方法?

转载 作者:太空宇宙 更新时间:2023-11-03 21:36:13 25 4
gpt4 key购买 nike

我的 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);

最佳答案

您可以使您的验证类通用:

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

关于c# - 如何将通用对象列表传递给方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21687545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com