使用您定義的屬性,您不需要進行任何複製,就像您擁有的一樣。我不確定ChangeSomething()是什麼,但你應該可以直接在屬性上調用它。我通常會拔不出來作爲一個對象......這已經有一段時間,因爲我做了純粹的web表單的發展,但我的ViewState的幫手屬性通常看起來更像是:
public string CurrentUsername
{
get
{
if (ViewState["Username"] is string)
return (string)ViewState["Username"];
return null;
}
set { ViewState["Username"] = value; }
}
編輯:關於它的思考,我猜複製可能只是爲了在每次引用屬性時刪除潛在的性能開銷。我不認爲這是在大多數情況下,一個有效的優化,但是如果你感到強烈的話,你可以像這樣的東西隱藏:
private string m_CurrentUsername;
public string CurrentUsername
{
get
{
if (m_CurrentUsername == null && ViewState["Username"] is string)
m_CurrentUsername = (string)ViewState["Username"];
return m_CurrentUsername;
}
set { ViewState["Username"] = m_CurrentUsername = value; }
}
就像我,雖然說 - 我不會推薦。
我認爲你是過分分析我的問題,我並不關心投射開銷,我只是想舉一個簡單的例子。問題是,如果ChangeSomething()返回一個對象,我可以寫MyObject = MyObject.ChangeSomething();這很好,但如果ChangeSomething()返回void並修改實例變量,則不能直接使用MyObject.ChangeSomething()修改視圖狀態,只要該屬性包裝了普通實例變量即可。至少這是我在嘗試時看到的。我認爲這是與被序列化的底層對象有關。 – fearofawhackplanet 2009-12-03 18:32:29