C#内存工作原理

今天在工作中碰到一个很奇怪的问题

问题代码如果下

View Code
1 List<ReportColumnEntity> reportColumnList = new List<ReportColumnEntity>();
2 ReportColumnEntity column = new ReportColumnEntity();
3
4 foreach (ReportModel fields in )
5 {
6 column.Field = fields.ItemValue;
7 column.Type = (int)DataType.TypeOfstring;
8 column.Title = fields.ItemText;
9 reportColumnList.Add(column);
10 }

以上代码希望将reportFields中的每个元素都增加到reportColumnList 但是没有达到想要的结果

结果:reportColumnList 所有的元素都是reportFields中的最后一个

分析 :ReportColumnEntity column = new ReportColumnEntity();
在foreach外面,所以开辟了个内存空间

在foreach内对column的操作时,都是对这一块内存进行操作

在使用reportColumnList.Add(column);时,只是使用了对column的引用,所以就会出现以上的现象

因此解决办法就是把代码修改成如下:

List<ReportColumnEntity> reportColumnList = new List<ReportColumnEntity>();

foreach (ReportModel fields in reportFields)
{
ReportColumnEntity column
= new ReportColumnEntity();
column.Field
= fields.ItemValue;
column.Type
= (int)DataType.TypeOfstring;
column.Title
= fields.ItemText;
//sqlParams.Add<Decimal?>("@" + item.ItemName, item.ItemControlValue.AsDecimal(0)).SqlDbType = SqlDbType.Decimal;

reportColumnList.Add(column);
}
posted @ 2011-07-08 12:45  wangjj89621  阅读(309)  评论(0编辑  收藏  举报