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,
引用类型不是指向同一内存地址吗?我感觉应该会一起更新啊,求解答
问题出在这里:
Hashtable HashListDetail = HashList[StepID];
上面这句会创建一个新的局部变量,该变量指向HastList里面的一个元素。(该局部变量的值和元素指向同一内存地址,尽管我们可以通过HashListDetail.成员 = ...来修改HashList,但他们是两个变量)
HashListDetail = ht;
这里为局部变量赋予了一个新值ht,这时,HashListDetail不再指向HashList里面的元素了。所以上面的操作当然没有更新session HashList的值。建议这样使用:
HashList[StepID] = ht;
这个问题的本质是:按值传递引用类型时,我们可以改变对象的状态数据,但无法把引用重新赋值给一个新对象。
你想干什么?你感觉StepID=i就更新到viewstate里面了?