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

标签 c# linq generics

我的 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/

相关文章:

java - 我可以定义 Map<String, List< 吗?扩展 BaseView>> 以便我可以从 map 中 get() 列表而无需未经检查的转换?

objective-c - '@objc' 类的通用子类不能具有显式的 '@objc' 属性

java - NotFound 无法转换为 Throwable

c# - 如何以编程方式创建 Enterprise Architect 包、类、属性

c# - 依赖注入(inject)刷新缓存

c# - 组合框数据绑定(bind)(C# winforms)

c# - 方法无法转换为 LINQ 中的存储表达式

c# - 使用 IEqualityComparer 的联合列表

c# - LINQ 计算集合中的多个值

c# - 加入时 Linq 返回太多结果