【问题标题】:How to return the list<class> in c#?如何在 C# 中返回列表<class>?
【发布时间】:2017-08-19 16:07:46
【问题描述】:

我试图从一个方法返回列表。但我只得到列表中的最后一个迭代数据。我在哪里犯了错误?它会覆盖列表中每个循环的数据。

 public class ProjectData
 {
     public string name { get; set; }
     public string id { get; set; }
     public string web_url { get; set; }
 }

 public static List<ProjectData> GetProjectList()
 {
     int pageCount = 0;
     bool check = true;
     List<ProjectData> copy = new List<ProjectData>();
     List<ProjectData> projectData = new List<ProjectData>();

     while (check)
     {
         ProjectData NewProjectData = new ProjectData();
         pageCount = pageCount + 1;
         string userURL = "http://gitlab.company.com/api/v3/groups/450/projects?private_token=token&per_page=100&page=" + pageCount;
         HttpWebRequest requestforuser = (HttpWebRequest)WebRequest.Create(userURL);
         HttpWebResponse responseforuser = requestforuser.GetResponse() as HttpWebResponse;
         using (Stream responseStream = responseforuser.GetResponseStream())
         {
             StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
             var JSONString = reader.ReadToEnd();
             projectData = JsonConvert.DeserializeObject<List<ProjectData>>(JSONString);
             if (JSONString == "[]")
             {
                 check = false;
                 break;
             }
         }
         copy = projectData.ToList();
     }
     return copy;
 }

我知道有超过 300 条数据可供填写。我使用断点检查了它。在那,我发现所有数据都正确获取。但它没有被复制到copy&lt;&gt;list。每次都在copy&lt;&gt; 列表中被覆盖。如何防止过度写入?

【问题讨论】:

    标签: c# json list


    【解决方案1】:

    在每次迭代中,您将用projectData 中的当前值覆盖copy 的值,并且只会返回最后一个值。实际上projectDatacopy 属于同一类型,即List&lt;ProjectData&gt;,因此您无需使用.ToList() 将它们再次转换为列表。简而言之,你必须像这样使用:

    copy.AddRange(projectData);
    

    代替这个copy = projectData.ToList();

    【讨论】:

      【解决方案2】:

      替换copy = projectData.ToList(); copy.Add(projectData.ToList());

      【讨论】:

      • 实际上这是错误的,您不能使用Add 方法添加List&lt;ProjectData&gt;,而必须使用AddRange。还有一件事projectData 已经是一个列表,您无需再次调用.ToList()
      • 我通过将copy = projectData.ToList(); 替换为copy.AddRange(projectData); 得到了所需的输出
      猜你喜欢
      • 1970-01-01
      • 2022-01-08
      • 2014-05-24
      • 2019-01-06
      • 2010-11-05
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      • 2013-04-13
      相关资源
      最近更新 更多