当我在调试器中查看由单个项目填充的列表时,其_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();
  • distinctNums_items中包含4个元素:(6, 0, 0, 0),这显然是错误的。
  • distinctNums2具有1个正确的项目(6)
  • 最佳答案

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

    但是,如果您检查一下,就会发现distinctNums.Count == 1。比较 Count Capacity 属性。

    10-06 01:48