我向请教各位高手List<T>中Add方法的原理是什么?
如果我:    
T obj = new T();
int i=1;
while(i<3)
{
       。。// 这是一些从文件读数据转换成obj对象
       CompanyIDRecord cid = obj as CompanyIDRecord;
       list.Add(cid);
    i++;
}为什么我debug时第二次循环时第一次add到list的cid 的值也被改了?Add方法后list里面存的难道不是对象的值是对象的地址值吗?求助高手,讲详细点吧

解决方案 »

  1.   

    虽然obj是局部的,但是加入到list后,list里就有了这个obj的引用,所以退出循环后不会被回收
      

  2.   

    list里就有了这个obj的引用?是通过add方法会创建一个空间来放他们的地址?
      

  3.   

    不好意思,眼睛花了
    List它就弄了个数组来存你给它的东西(赋值给某个数组元素而已),你给的值类型,就会复制一份,你给的引用类型它就存个引用(赋值的特性)
    List干的事就是会动态分配那个数组的大小,以及管理索引及数量值,所以你Add就够了,数组不够大时它会重新分配的。
      

  4.   

    T obj = null;
    int i=1; 
    List<T> list=new List<T>)();
    while(i <3) 

           obj = new T(); 
           list.Add(cid); 
        i++; 
      

  5.   

    那我再问下这个正则表达式具体是什么意思啊@"^[a-zA-Z\b][!-_a-z\b]*$"