小白错误-C#添加List元素

2011-03-08  籽藤 

  好久没来和讯了,最近喜欢上腾讯微博。想到前几天在写SeleniumRC脚本时,出了一个小白错误,觉得有必要记录一下:

  public static List<Campaign> CampaignMapping(string function) {

            DataTable dt = parm.getParameter(function);

            List<Campaign> camplist = new List<Campaign>();
            Campaign camp = new Campaign();

            foreach (DataRow data in dt.Rows) {

                camp.Name = data[0].ToString();
                camp.Type = data[1].ToString();

                if (function != "AddCampaign")
                {
                    camp.Store = data[8].ToString();
                    camp.Feedback_type = data[9].ToString();
                }
                camplist.Add(camp);
            }

            return camplist;
        }

 发现问题了吗?  

 照上面的写法,camplist中每个Campaign对象的内容都是一模一样的――是最后一个Campaign对象的内容。

 正确的写法是:在foreach中创建Campaign  Campaign camp = new Campaign();

 原因很简单,因为Campaign对象是引用类型,传的是内存地址;而List返回引用类型的副本,所以对于同一个Campaign对象,它改变后,List中的值也改变了。如果在foreach中创建Campaign对象,那么每次都会指向新的Campaign对象,之后再对Campaign对象进行修改,就不会影响之前添加到List中的元素了。

 希望这样小白的错误,以后越少出现越好  

  

 

409°/4092 人阅读/0 条评论 发表评论

登录 后发表评论