1

我有一个 ViewState["blah"] ,它是一个字符串列表。在某些时候,我将 List<string> 变量设置为等于视图状态。我对此变量所做的任何更改都会影响视图状态:

List<string> a = {"1", "2", "3"};
ViewState["Blah"] = a;
....
List<string> b = (List<string>)ViewState["Blah"];
b.Remove("2");

现在,ViewState["Blah"] 是 {"1", "3"}。我究竟做错了什么?

4

1 回答 1

1

因为当你这样做时

List<string> b = (List<string>)ViewState["Blah"];

您正在分配b指向内存中某个位置(引用)的指针,而不是列表的副本。这意味着bandViewState["Blah"]指向同一个列表,并且其中任何一个的更改都会影响另一个。

如果您想b从您的ViewState实例中分离,您可以克隆您的列表

于 2013-05-30T13:38:49.080 回答