C#是否会在List <Object>上提前保留三个空实例?

Day*_*yan 0 c# .net-3.5 windows-mobile-6.5 windows-embedded-compact

我有以下几点:

 public static class LocalFileModelList
    {
        public static List<LocalFileModel> ModelList = new List<LocalFileModel>();
    }

    public class LocalFileModel
    {
        public string Name { get; set; }
        public string Extension { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

然后是一种从目录读取所有文件的方法。

public static List<LocalFileModel> GetAllFiles(string path)
{
    var files = Directory.GetFiles(path, "*.*");

    foreach(var file in files)
    {
        var Extension    = Path.GetExtension(file);
        var Filename     = Path.GetFileNameWithoutExtension(file);

        var model = new LocalFileModel
        {
            Name         = Filename,
            Extension    = Extension,
        };

        LocalFileModelList.ModelList.Add(model);     
    }

    return LocalFileModelList.ModelList;
}
Run Code Online (Sandbox Code Playgroud)

我注意到,在逐步执行代码时,当我创建的新实例时LocalFileModel,用数据填充它,然后将其添加到列表中。列表自动创建了另外三个类型为的实例null。一旦这三个对象各自填充了对象,它将再次创建更多的空实例...

在此处输入图片说明

我现在才意识到这一点,这是正常的吗?

dca*_*tro 5

List<T>具有一个内部数组,该数组具有一定的容量,该容量始终等于或大于列表中的项目数。

list.Capacity >= list.Count
Run Code Online (Sandbox Code Playgroud)

您实际上可以告诉列表其内部阵列应使用的容量。

new List<int>(capacity: 5);
Run Code Online (Sandbox Code Playgroud)

当插入一个项目并且数组达到其容量时,列表将创建一个新数组,其大小是先前大小的两倍,以容纳新元素。因此,在您的情况下,如果要插入第5个项目,则列表将分配一个具有8个插槽的新内部数组(其中5个将被填充)。

有关更多详细信息,请在此处检查实现。