首页 > 解决方案 > 超出列表的大小,在 C#、LINQ 中调用 ToList() 时我丢失了元素

问题描述

我正在从文件中读取。var 包含大约 512 个对象。当我使用 ToList() 时,我只得到 438。这基本上是列表的默认大小。我试图将它增加到 512 并且它已经工作了,但是当我调用 ToList() 时,我又得到了 438。如果有人可以帮助我的话。如果我中断 if 并打印例如 200 个对象,我会得到第一个在我不中断时不出现的对象。由于默认大小,我正在丢失记录。

调用 ToList() 时有什么方法可以改变它吗?

XDocument doc = XDocument.Load("file.xml");

        var var = from elem in doc.Descendants("Groups").Elements()
                  select new Group
                  {
                      x1 = elem.Element("x1") != null ? elem.Element("x1").Value : String.Empty,
                      x2 = elem.Element("x2") != null ? elem.Element("x2").Value : String.Empty,
                      x3 = elem.Element("x3") != null ? elem.Element("x3").Value : String.Empty,
                      x4 = elem.Element("x4") != null ? elem.Element("x4").Value : String.Empty,
                      x5 = elem.Element("x5") != null ? elem.Element("x5").Value : String.Empty,
                      x6 = elem.Element("x6") != null ? elem.Element("x6").Value : String.Empty,
                      x7 = elem.Element("x7") != null ? elem.Element("x7").Value : String.Empty
                  };
        int size = var.ToList().Capacity;
        Console.WriteLine(size);

        List<Group> list = new List<Group>(size);



        list = var.ToList();


        int i = 0;
        foreach (Group ins in list)
        {
            i++;
            Console.WriteLine(ins.ToString());
        }
        Console.WriteLine(i);

标签: c#listlinq

解决方案


您似乎使用Capacity而不是Count检索以下项目的数量var

int size = var.ToList().Capacity;

这很可能是错误的(参见MSDN):

容量是在需要调整大小之前 List 可以存储的元素数量,而 Count 是实际在 List 中的元素数量。


推荐阅读