日期:2014-05-17  浏览次数:20924 次

Session的值为什么变了?
DataTable tb = (DataTable)Session["t_Table"];

对表tb操作。。。

再次读(DataTable)Session["t_Table"]的时候,为什么里面的值也更着变了?

我用字符串测试了下,好像不会变!但是datatable会变。
session

------解决方案--------------------
引用:
DataTable tb = (DataTable)Session["t_Table"];

对表tb操作。。。

再次读(DataTable)Session["t_Table"]的时候,为什么里面的值也更着变了?

我用字符串测试了下,好像不会变!但是datatable会变。

 
一个是对象一个是基本类型,对象里面的值变了,其他地方引用的这个对象也会变,基本类型就不会。
------解决方案--------------------
对于string或者datatable,Session中存储的都是引用
只不过.net中的字符串有不可变性,
string abc = "abc";
session["abc"]=abc; 
abc="123" 当你这样修改字符串后,其实是将abc的重新引用至"123"了
而session则仍然引用的是原来的 "abc"
了解一下堆栈模型就很好理解了
------解决方案--------------------
Session["t_Table"]存储的始终是原来的那个dt,你对dt插行,删行,修改,都不会修改Session["t_Table"]对dt的引用