首页 新闻 会员 周边

有关引用的问题

0
悬赏园豆:50 [已解决问题] 解决于 2011-11-01 09:01

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,
引用类型不是指向同一内存地址吗?我感觉应该会一起更新啊,求解答

褐色键盘的主页 褐色键盘 | 初学一级 | 园豆:55
提问于:2011-10-31 11:22
< >
分享
最佳答案
1

问题出在这里:

Hashtable HashListDetail = HashList[StepID];

上面这句会创建一个新的局部变量,该变量指向HastList里面的一个元素。(该局部变量的值和元素指向同一内存地址,尽管我们可以通过HashListDetail.成员 = ...来修改HashList,但他们是两个变量)

HashListDetail = ht;

这里为局部变量赋予了一个新值ht,这时,HashListDetail不再指向HashList里面的元素了。所以上面的操作当然没有更新session HashList的值。建议这样使用:

HashList[StepID] = ht;

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

收获园豆:50
Life a Poem | 菜鸟二级 |园豆:437 | 2011-10-31 15:38
其他回答(1)
0

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

顾晓北 | 园豆:10844 (专家六级) | 2011-10-31 12:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册