2013-05-30 56 views
1

我有一個ViewState [「blah」],它是一個字符串列表。在某些時候,我設置了一個List <字符串>變量等於視圖狀態。無論改變我對這個變量影響的視圖狀態:爲什麼ViewState發生變化

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

現在,ViewState的[ 「嗒嗒」]爲{ 「1」, 「3」}。我究竟做錯了什麼?

+0

分離b? –

回答

1

因爲當你做

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

你分配給b在內存的指針到一個地方(參考),而不是列表的副本。這意味着bViewState["Blah"]指向相同的列表,其中任何一個的更改都會影響另一個列表。

你可以複製你的清單,如果你想在哪裏你是存儲在事件視圖狀態從ViewState實例

+0

Claudio,我如何「克隆」列表,以便對其進行更改不會影響ViewState(在我的問題中使用示例代碼)?我猜測有比宣佈新列表「c」更好的方法,並將項目從「b」複製到它。 – NoBullMan

+0

我用清單 c = new List (b);這是「克隆」的正確方法嗎? – NoBullMan

+0

@NoBullMan:應該爲原始類型做字符串作爲字符串 –

相關問題