簡體   English   中英

如何將通用對象列表傳遞給方法?

[英]How to pass in a list of generic objects into a method?

我的CheckModelValidation方法(測試單個模型)僅通過將類模型UserInsertModel作為對象傳入,而在我的單元測試中進行了很好的測試,但是當我嘗試在我的單元測試CheckModelListValidation模型列表傳遞給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

將方法的簽名更改為:

public static void CheckModelListValidation<T>(List<T> model)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM