日期:2014-05-17  浏览次数:20774 次

List<引用类型>的赋值问题
定义:
List<MyClass> list;
MyClass myclass;
DataTable da; //表中包含MyClass的属性
通过for循环赋值
for(i=0;i<x;i++)
{
   myclass= new MyClass();
   myclass.Pr1=da.Rows[i][0].ToString();
   list.Add(myclass)
}
这样的结果就是list中所有的item都已指向了一个myclass实例。
之后我再MyClass类中定义了一个Copye的方法,来获得一个全新的实例
问题是:我这种做法是不是常规做法,正确的方法应该是什么?
List 实例

------解决方案--------------------
你这种做法就是比较常规的。
------解决方案--------------------
也可以用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>(); 
}

------解决方案--------------------
引用:
真的?但是感觉这种办法有点蠢


你至少骂了80%的coder
------解决方案--------------------
这样的结果就是list中所有的item都已指向了一个myclass实例。
应该是每个item都对应一个实力的吧 你都是不断地new出来的~

------解决方案--------------------
你这样做实际上每一次都把上次的对象丢弃了,变成了垃圾。要把MyClass声明放到循环里面。
------解决方案--------------------
将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谢谢!!
------解决方案--------------------
上面的回帖中实例化多了一个myclass对象!

List<MyClass> list;
DataTable da; //表中包含MyClass的属性
通过for循环赋值
for(i=0;i<x;i++)
{
   MyClass myclass = new MyClass();