在C#中更新对象时会话对象发生更改

CJe*_*CJe 6 .net c# asp.net session session-variables

我有这个非常奇怪的问题,我确信我在这里遗漏了一些明显的东西.我有这两行:

HttpContext.Current.Session[listModelType + "ListModel"] = listModel;
listModel.ProductRows = new Collection<ProductRow>(listModel.ProductRows.Where(r => r.ParentRowId == 0).ToList());
Run Code Online (Sandbox Code Playgroud)

执行第二行后,我的会话对象也会更新(根据Visual Studio中的"Watch")

我在这里错过了什么?

我试过了

int i = 0;
HttpContext.Current.Session["i"] = i;
i++;
Run Code Online (Sandbox Code Playgroud)

和HttpContext.Current.Session ["i"]保持为0.

Cod*_*ter 12

请参阅值类型和引用类型.

int是一个值类型,因此将在分配时"按原样"存储; your listModel是一个引用类型,因此您在会话中存储对象的引用,而不是对象的值.

listModel如果您希望会话中的那个不受影响,则必须创建一个新实例.