为了账号安全,请及时绑定邮箱和手机立即绑定

有关引用的问题

有关引用的问题

梵蒂冈之花 2018-08-10 13:10:05
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;

这个问题的本质是:按值传递引用类型时,我们可以改变对象的状态数据,但无法把引用重新赋值给一个新对象。


查看完整回答
反对 回复 2018-08-13
?
慕后森

TA贡献1802条经验 获得超5个赞

你想干什么?你感觉StepID=i就更新到viewstate里面了?

查看完整回答
反对 回复 2018-08-13
  • 2 回答
  • 0 关注
  • 625 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信