列表显示调试器中的4个项目,即使只填充了一个元素

use*_*267 10 c# linq distinct tolist

当我查看在调试器中填充单个项目的列表时,其_items字段包含4个元素.你能解释一下这种行为吗?

我发现,虽然我调试控制台应用程序,以了解DistinctToList和结果混淆了我.码:

List<int> nums = new List<int>() { 6, 6, 6, 6, 6, 6, 6, 6 };
List<int> distinctNums = nums.Distinct().ToList();
int[] distinctNums2 = nums.Distinct().ToArray();
Run Code Online (Sandbox Code Playgroud)
  • distinctNums 有4个元素_items:(6, 0, 0, 0)这显然是错误的.
  • distinctNums2有1项(6)是正确的.

p.s*_*w.g 12

这将创建distinctNums仅包含一个项目的列表,就像您期望的那样.但是,.NET中的列表由一个数组支持,该数组在向其添加项目时会自动调整大小.此数组的大小为4,因此[4, 0, 0, 0]如果您碰巧通过反射或调试器探测它,则内部数组将会出现.

但如果你检查,你会发现distinctNums.Count == 1.比较CountCapacity属性.