C# List<GenericClass>(100) 构造原理

标签 c# list constructor default capacity

如果我执行以下操作:

List<GenericClass> listObj = new List<GenericClass>(100);

// Do I need this part too?
for (int i = 0; i < 100; i++)
{
    listObj[i] = new GenericClass();
}

基本上我是在问 C# 编译器是否会自动为列表中的 100 个 GenericClass 对象触发 GenericClass 构造函数。我在 MSDN 文档以及 StackOverflow 上进行了搜索。

感谢您的帮助。

最佳答案

这不是List 的工作原理。当您指定容量时,它是初始容量,而不是列表中的项目数。在通过 Add 方法添加元素之前,该列表不包含任何元素。列表没有最大容量。由于您是通过 Add 方法添加对象,所以您必须首先更新它们。

事实上,执行您在问题中输入的操作会引发 ArgumentOutOfRange 异常。

对于您正在做的事情,您需要使用数组。

var listObj = new List<GenericClass>();
listObj[0] = new GenericClass(); // ArgumentOutOfRange exception

这会起作用:

for (int i=0;i<100;i++)
{
    listObj.Add(new GenericClass());
}

这就是您尝试做的事情:

var arrayObj = new GenericClass[100];
for (int i = 0; i < 100; i++)
{
    arrayObj[i] = new GenericClass();                
}

关于C# List<GenericClass>(100) 构造原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9147486/

相关文章:

c# - 无法在c#中启动资源管理器进程,只能启动窗口文件资源管理器

c++ - 不允许抛出异常时如何处理失败的构造函数

java - 编译器没有发现实例变量和构造函数初始化期间传递的参数之间存在歧义?

python - 比较两个列表以选择最大值

c++ - 类型名称后面的括号是否与new有所不同?

c# - 自动对焦例程检测非常小的模糊差异

c# - C# 中的 ASP.Net 标签更改

c# - 在 Web.Config 中限制 URL 参数长度

list - 大于 X 的第一个元素的索引(Prolog)

Python 链表 O(1) 插入/删除