今天在工作中碰到一个很奇怪的问题
问题代码如果下

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);
}