ASP.Net MVC中Session存储的DataTable被关联DataTable清空问题
问题原因解析
这是因为DataTable属于引用类型,而非值类型,具体逻辑如下:
- 执行
dataTable = (DataTable)Session["MyDataTable"];时,并没有生成新的DataTable对象,只是将Session中存储的DataTable实例的内存引用地址赋值给了变量dataTable。此时dataTable和Session["MyDataTable"]指向的是内存中同一个DataTable实例。 - 当调用
dataTable.Rows.Clear();时,实际是对内存中这个唯一的DataTable实例执行清空行操作,Session里存储的引用依然指向该实例,所以Session中的DataTable也会同步变为空。
如果要避免修改变量时影响Session内的原数据,需要先创建原DataTable的副本,示例代码:
dataTable = ((DataTable)Session["MyDataTable"]).Copy(); dataTable.Rows.Clear(); // 此时仅修改副本,Session中的原DataTable不受影响
内容的提问来源于stack exchange,提问作者Frank Martin
相关产品推荐
相关产品推荐

