2015-02-10 83 views
-1

我想如何分配會話變量,它是我定義的類的類型,這裏是OrderData類。 我在'Session [「MyOrder」]上遇到錯誤;'如何將Session對象分配給C#中的本地對象.Net

我的代碼片段如下所示。 也作爲ord將對對象的引用,對對象的任何更改都會反映到會話對象?

OrderData ord = new OrderData(); 
if (Session["MyOrder"] == null) 
{ 
    Session.Add("MyOrder", ord); 
} 
else 
{ 
    ord = Session["MyOrder"]; 
} 
+1

*對象的任何更改都會反映到會話對象?*是的,它會反映出來。兩者都指向相同的參考。 – 2015-02-10 19:21:14

回答

2

你必須明確地將它轉換爲你的類型,如:

ord = Session["MyOrder"] as OrderData; 

,然後檢查null。如果投射失敗,as可能會返回null

if(ord != null) 
{ 
    //valid value 
} 

您還可以使用:

ord = (OrderData) Session["MyOrder"]; 

但是,這可能會引發的情況下,異常的Session持有不同的類型OrderData

爲:

也爲ORD將是對該對象的引用,任何對 對象的更改會被反映到會話對象?

由於`對象是一個類的實例,引用類型,它們將指向同一個實例。

考慮下面的例子:

OrderData ord1 = new OrderData() {ID = 2}; 
Session["MyOrder"] = ord1; 

var ord2 = Session["MyOrder"] as OrderData; 
ord2.ID = 1; 

在代碼執行結束既ord1ord2將具有ID1,因爲兩者的引用指向同一個對象。

+0

如果你擔心拋出異常,那麼爲什麼不做以下安全檢查 'if(!string.IsNullOrEmpty(Session [「MyOrder」] as string))? – MethodMan 2015-02-10 19:25:38

+2

@MethodMan,'MyOrder'不是一個字符串,不需要將其轉換爲字符串,然後使用String.IsNullOrEmpty來檢查。使用'as'將它轉換爲*特定類型*,然後檢查'null'就足夠了。 – Habib 2015-02-10 19:27:39

+0

如果您在他的問題中查看「OP」第二行代碼,我已經評論過它的內容,它是在您的答案的多個更新之前提到的。「OP」正在檢查的是會話爲空然後將對象添加到會話中 – MethodMan 2015-02-10 19:30:12