.NET,你忘记了么?(三续)——重新理解List<T>2011-04-12 博客园 飞林沙在上文中,《》中,我对 List<T>的理解大错特错,在成文前,首先做下自我批评,然后也对造成的不良影响表 示道歉。周四面试的惨败,让我的心情着实糟糕了两三天。痛定思痛,决心回家继续苦读。首先开始的就是对List的重新认知。在这里,让我们先从构造方法来重新认识 List<T>的本质,先来看下上文中我所粘出的代码:List<int> list = new List<int>(); for (int i = 0; i < 10; i++) { list.Add(i); } Random r = new Random(); for (int j = 0; j < 100; j++) { int temp; int x1 = r.Next(10); int x2 = r.Next(10); temp = list[x1]; list[x1] = list[x2]; list[x2] = temp; }
在上文中,我对这个List大批特批,现在,我们来重新看下这个List的构造:
public List() { this._items = List<T>._emptyArray; }先来看无参的构造方法,当无参的时候,.NET Framework其实是用一个_emptyArray来初 始化了List中的items集合。那么_emptyArray又是什么呢?我们继续向下看:private static T[] _emptyArray;恩,他是一个静态字段,然后我们看下List<T>的静态构造方法:static List() { List<T>._emptyArray = new T[0]; }我们看到,_emptyArray其实是一个T类型的数组,个数为0。那么也就是说,当我们执行0 参数的构造方法时,系统是把items集合给赋值为了一个T类型的个数为0的数组。