也可以用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>(); }
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>();
}
应该是每个item都对应一个实力的吧 你都是不断地new出来的~
我感觉他这样没什么问题的吧,毕竟他只是想把每个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谢谢!!
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谢谢!!
你这里根本没有变为垃圾,List本身在引用它,而且通过索引还可以找回,变量声明放外部才是最佳的,即使放内部也会被优化到外部去,效果一样。
总之你的写法可以说是最佳写法,别想太多。
你自己重写Clone方法,方法里面 new 一个实例
在循环外部声明了变量 myclass,是在栈上分配了一段内存,但是并没有指向堆中的任何数据,在for循环中new了对象,然后有了指向堆的指针,通过MyClass类的Copy方法复制了一个新的对象那么,在list中所引用的是是这个新Copy出来的对象,之前在堆上分配的不就落空了吗?
这里从应用层考虑,只能这么做:
一、如果循环内部不是new一个新对象,那么List添加的将是同一个对象的引用,这不符合要求,集合中的元素应该是不同的,否则我用一个变量表示足够。
二、如果不用变量临时存储新对象,那么访问对象的属性(赋值)就必须通过List的索引来访问,效率比直接访问变量慢得多。