超出列表大小,在 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);

您似乎使用Capacity而不是Count来检索var中的项目数:

int size = var.ToList().Capacity;

这很可能是错误的(请参阅 MSDN(:

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