c# - 超出列表的大小,在 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 是实际在 List 中的元素数量。
推荐阅读
- python - 将 datetime64[ns] 列转换为 Pandas 中的 DatetimeIndex
- python - 如何将多条曲线拟合到单个数据散点图?
- c# - 如何从序列化的 XML 节点中分离字符串
- python - 在 conda 环境中安装 glumpy(或其他非 conda 包)
- java - 为什么 Java 规范中没有定义 ThreadLocal 或 AnnotationProcessor?
- c++ - 在树莓派上用 C++ 从一个 Linux 应用程序到另一个应用程序的最简单 IPC
- python-3.x - 向直方图添加次要刻度线
- scala - 启用 DefaultTyping 时使用 Jackson Scala 枚举序列化失败
- javascript - 这个 fetch 如何在 react gatsby 网站上进行优化
- ms-access - 嵌套 IIf 语句有效,但 Switch 语句在 MS Access 中产生“溢出”错误。为什么?