解决方案 »

  1.   

    也可以用linq实现
    if (dtTable != null && dtTable.Rows.Count > 0)
     { 
    List<ClientStruct> list = (from a in dtTable.AsEnumerable() 
                               orderby a.Field<string>("Company")
                               select new ClientStruct
                                { ID = a.Field<Int32>("ID").ToString(), 
                                  Name = a.Field<string>("Name"), 
                                  Company = a.Field<string>("Company"), 
                                  CreateDate = a.Field<DateTime>("CreatedDate").ToString("yyyy-MM-dd") }).ToList<ClientStruct>(); 
    }
      

  2.   

    这样的结果就是list中所有的item都已指向了一个myclass实例。
    应该是每个item都对应一个实力的吧 你都是不断地new出来的~
      

  3.   

    你这样做实际上每一次都把上次的对象丢弃了,变成了垃圾。要把MyClass声明放到循环里面。
      

  4.   


    我感觉他这样没什么问题的吧,毕竟他只是想把每个myclass对象放到list里吧
      

  5.   

    将MyClass类在for循环里面实例化就可以了!List<MyClass> list;
    DataTable da; //表中包含MyClass的属性
    通过for循环赋值
    for(i=0;i<x;i++)
    {
       MyClass myclass = new MyClass();
       myclass= new MyClass();
       myclass.Pr1=da.Rows[i][0].ToString();
       list.Add(myclass)
    }O(∩_∩)O谢谢!!
      

  6.   

    上面的回帖中实例化多了一个myclass对象!List<MyClass> list;
    DataTable da; //表中包含MyClass的属性
    通过for循环赋值
    for(i=0;i<x;i++)
    {
       MyClass myclass = new MyClass();
       myclass.Pr1=da.Rows[i][0].ToString();
       list.Add(myclass)
    }O(∩_∩)O谢谢!!
      

  7.   

    不要被他误导,初学者很容易被各种说法误导,在CSDN上可以根据对方的技术分高低来判断回复的可行度。
    你这里根本没有变为垃圾,List本身在引用它,而且通过索引还可以找回,变量声明放外部才是最佳的,即使放内部也会被优化到外部去,效果一样。
    总之你的写法可以说是最佳写法,别想太多。
      

  8.   

    的确是你说的这样,list本身有对于那个对象的引用,我说错了。多谢指正。。
      

  9.   

    你这个写法没错,不会指向一个实例,你每次new都回创建新实力,
      

  10.   

    引用是指向堆的。
    你自己重写Clone方法,方法里面 new 一个实例
      

  11.   


    在循环外部声明了变量 myclass,是在栈上分配了一段内存,但是并没有指向堆中的任何数据,在for循环中new了对象,然后有了指向堆的指针,通过MyClass类的Copy方法复制了一个新的对象那么,在list中所引用的是是这个新Copy出来的对象,之前在堆上分配的不就落空了吗?
      

  12.   

    先请问你C#编程有多长时间了?如果不满一年,最好先别去研究堆栈上面的分配方式,只会越高越糊涂。.NET的垃圾回收是自动的,无需也无法手动干预。你这里不涉及非托管对象,因此根本没有垃圾产生的情况,不要用C++的思想来考虑问题。
      

  13.   

    学习并使用.NET,应该把思想放到应用层次,而不是堆栈处理上,.NET帮我们处理了与应用无关的技术部分,这样可以更快速的开发程序,这是优势,如果放弃这层优势,那就等于回到了C++的年代。
    这里从应用层考虑,只能这么做:
    一、如果循环内部不是new一个新对象,那么List添加的将是同一个对象的引用,这不符合要求,集合中的元素应该是不同的,否则我用一个变量表示足够。
    二、如果不用变量临时存储新对象,那么访问对象的属性(赋值)就必须通过List的索引来访问,效率比直接访问变量慢得多。
      

  14.   

    这样用不就行了,无需拷贝MyClass myclass = (MyClass)List[i]