2012-04-04 117 views
20

可以請人向我解釋的區別:Session.Add(「key」,value)和Session [「key」] = value之間有什麼區別?

Session.Add("name",txtName.text);Session["name"] = txtName.text;

這是一個面試問題和回答我在key = "Value"格式一樣Dictionary類在C#中都存儲的數據。

我說得對,還是有區別?

+2

我確定這裏有一些很好的msdn文檔。也許你可以自己研究一下,爲下次面試做好準備。 – jpm 2012-04-04 19:33:25

+13

這是一個*糟糕的*面試問題。 – 2012-04-04 20:29:19

+2

@EricLippert,我完全同意。僱用開發人員的過程在大多數組織中都被嚴重破壞。 – SolutionYogi 2012-04-04 20:38:11

回答

18

看着HttpSessionState的代碼告訴我們它們實際上是一樣的。

public sealed class HttpSessionState : ICollection, IEnumerable 
{ 
    private IHttpSessionState _container; 
... 
    public void Add(string name, object value) 
    { 
     this._container[name] = value; 
    } 

    public object this[string name] 
    { 
     get 
     { 
      return this._container[name]; 
     } 
     set 
     { 
      this._container[name] = value; 
     } 
    } 
... 
} 

至於它們在key = "Value"格式等Dictionary類在C#兩者

存儲數據。

它們實際上將結果存儲在一個IHttpSessionState對象中。

+1

這是一個很好的答案,因爲它在代碼中完全顯示了爲什麼這兩個函數是等價的,這有助於內化概念。我喜歡@matthew關於Dictionary的另一條評論中的註釋,因爲我一直在思考我們在會話狀態中使用Dictionary或其他哈希表,並且坦率地說,我一直在做愚蠢的舞蹈來檢查是否基於此值添加或修改之前,該值已經存在。 – TonyG 2013-12-24 22:06:02

+0

這是不一樣的,因爲:__key__存在時,__value__是** _ update _ **,但如果__key__ __doesn't__存在,則他們** _用__value__創建_ **,如果__ ** SaveOrUpdate ** __方法。 – Adhemar 2016-07-04 15:21:27

9

您發佈的兩個代碼片段在功能上是一樣的。更新(或創建,如果它不存在)由密鑰定義的某個Session對象。

Session.Add("name",txtName.text);

相同:

Session["name"] = txtName.text;

第一種是基於方法的,其中,第二串是基於索引-。兩者都覆蓋由鍵保持的以前的值。

+3

與「Dictionary」相反,如果嘗試使用相同的鍵兩次將「Add」添加到字典中,它將引發異常。 「Dictionary」的索引器與「Session」對象類似(它會添加或更新,並且不會引發異常)。 – Matthew 2012-04-04 20:02:47

+0

@Matthew很好的附加說明... – 2012-04-05 12:23:49

+0

@Mathew - 感謝您的額外注意事項 – 2013-07-09 05:24:47

相關問題