List<Hashtable> HashList = (List<Hashtable>)Session["ary"];int StepID = Convert.ToInt32(ViewState["StepID"].ToString());for (int i = 0; i < HashList.Count; i++){if (ViewState["StepID"].ToString() == HashList[i]["stepId"].ToString()){StepID = i;break;}}Hashtable HashListDetail = HashList[StepID];HashListDetail = ht;想把ht更新到session中,可是不行,这样只能更新HashListDetail,引用类型不是指向同一内存地址吗?我感觉应该会一起更新啊,求解答
2 回答
九州编程
TA贡献1785条经验 获得超4个赞
问题出在这里:
Hashtable HashListDetail = HashList[StepID];
上面这句会创建一个新的局部变量,该变量指向HastList里面的一个元素。(该局部变量的值和元素指向同一内存地址,尽管我们可以通过HashListDetail.成员 = ...来修改HashList,但他们是两个变量)
HashListDetail = ht;
这里为局部变量赋予了一个新值ht,这时,HashListDetail不再指向HashList里面的元素了。所以上面的操作当然没有更新session HashList的值。建议这样使用:
HashList[StepID] = ht;
这个问题的本质是:按值传递引用类型时,我们可以改变对象的状态数据,但无法把引用重新赋值给一个新对象。
- 2 回答
- 0 关注
- 625 浏览
添加回答
举报
0/150
提交
取消