List的初始化

z752964360 2010-04-22 10:27:02

class Doc
{//定义一个类
}
List<Doc> listDoc = new List<Doc>(10); //这个只是分配内存?不会像将内存初始化为0?
...全文
2760 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhushoudong 2010-04-22
  • 打赏
  • 举报
回复
学习了
sxiaohui8709253 2010-04-22
  • 打赏
  • 举报
回复
学习,,,
z752964360 2010-04-22
  • 打赏
  • 举报
回复
刚才调试了,看不到List<T>没初始化的内存!
z752964360 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 liangchencf 的回复:]

肯定不会初始化数据,但是关键是看是new时分配的内存还是在add时分配,你可以new List<T>(1024*1024),然后单步运行看看任务管理器的内存使用情况就可以了。另外new List<T>(100)和new T[100]是不一样的,new T[100]才是申请了一个T类型数组,100个,再需要每个都new一下才行
[/Quote]

有道理试下
z752964360 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 vrhero 的回复:]

这个根本不是分配内存,只是在初始化时指定了新列表最初可以存储的元素数...

权威的解释MSDN都有,前提是你得学会看MSDN...
引用 MSDN:
List<T> 的容量是 List<T> 可以容纳的元素数。当向 List<T> 中添加元素时,将通过重新分配内部数组来根据需要自动增大容量。

如果可以估计集合的大小,那么当指定初始容量后,将无需在向 List<T> 中添加元素时执……
[/Quote]

是分配内存的
liangchencf 2010-04-22
  • 打赏
  • 举报
回复
肯定不会初始化数据,但是关键是看是new时分配的内存还是在add时分配,你可以new List<T>(1024*1024),然后单步运行看看任务管理器的内存使用情况就可以了。另外new List<T>(100)和new T[100]是不一样的,new T[100]才是申请了一个T类型数组,100个,再需要每个都new一下才行
Peter200694013 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 vrhero 的回复:]
这个根本不是分配内存,只是在初始化时指定了新列表最初可以存储的元素数...

权威的解释MSDN都有,前提是你得学会看MSDN...

引用 MSDN:
List<T> 的容量是 List<T> 可以容纳的元素数。当向 List<T> 中添加元素时,将通过重新分配内部数组来根据需要自动增大容量。

如果可以估计集合的大小,那么当指定初始容量后,将无需在向 List<T> 中添加元素时……
[/Quote]
vrhero 2010-04-22
  • 打赏
  • 举报
回复
这个根本不是分配内存,只是在初始化时指定了新列表最初可以存储的元素数...

权威的解释MSDN都有,前提是你得学会看MSDN...
[Quote=引用 MSDN:]
List<T> 的容量是 List<T> 可以容纳的元素数。当向 List<T> 中添加元素时,将通过重新分配内部数组来根据需要自动增大容量。

如果可以估计集合的大小,那么当指定初始容量后,将无需在向 List<T> 中添加元素时执行大量的大小调整操作。

可通过调用 TrimExcess 方法或通过显式设置 Capacity 属性减少容量。减少容量会重新分配内存并复制 List<T> 中的所有元素。

此构造函数的运算复杂度为 O(n),其中 n 是 capacity。

Capacity 是 List<T> 在需要调整大小之前可以存储的元素数,Count 则是 List<T> 中实际存储的元素数。

Capacity 总是大于或等于 Count。如果在添加元素时 Count 超过 Capacity,则通过在复制旧元素和添加新元素之前自动重新分配内部数组来使容量增加。

可通过调用 TrimExcess 方法或通过显式设置 Capacity 属性减少容量。如果 Capacity 的值是显式设置的,则内部数组也需要重新分配以容纳指定的容量,并且需要复制所有元素。

检索此属性值的运算复杂度为 O(1);设置此属性的运算复杂度为 O(n),其中,n 是新容量。

如果 Count 已经等于 Capacity,则在添加新元素之前,会通过自动重新分配内部数组来增加 List<T> 的容量并会将现有元素复制到新数组中。

如果 Count 小于 Capacity,则此方法的运算复杂度为 O(1)。如果需要增加容量以容纳新元素,则此方法的运算成为复杂度为 O(n) 的运算,其中 n 为 Count。
[/Quote]
斑斓 2010-04-22
  • 打赏
  • 举报
回复
只分配了内存!
z752964360 2010-04-22
  • 打赏
  • 举报
回复
上边的应该只分配内存,那个 List<Doc>(10)只是说List<Doc>的Capcity = 10并没有初始化,实例化任何对象
我是这样认为的,但在MSDN上没找到权威的解释!
卧_槽 2010-04-22
  • 打赏
  • 举报
回复
引用类型,只在堆内存中分配一个首地址指针。且指向空。所以为null
值类型,在堆内存中分配一个地址,且赋值为0。可空值类型为null
zhenonline 2010-04-22
  • 打赏
  • 举报
回复
在C#中,值类型必须初始化,值类型不可以为NULL,但空类型可以为空
引用类型若不初始化,默认为NILL
sxiaohui8709253 2010-04-22
  • 打赏
  • 举报
回复
已经分配内存空间了吧
litgle 2010-04-22
  • 打赏
  • 举报
回复
int在初始化时才是0
引用类型初始化时是null

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧