2012-04-04 16 views
20

誰かが私には違い説明していただけます。Session.Add( "key"、value)とSession ["key"] = valueの違いは何ですか?

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

それは面接の質問だったと私はC#でDictionaryクラスのようkey = "Value"形式の両方のストアデータと答えを。

私はそうですか、それとも違いがありますか?

+2

これについては、いくつかの素晴らしいmsdnのドキュメントがあると確信しています。おそらく、あなたは自分でそれを研究し、次のインタビューのためによりよく準備することができます。 – jpm

+13

それは*ひどい*インタビューの質問です。 –

+2

@EricLippert、私は完全に同意します。開発者を雇うプロセスは、ほとんどの組織で非常に壊れています。 – SolutionYogi

答えて

18

HttpSessionStateのコードを見ると、実際には同じであることがわかります。 C#でDictionaryクラス等key = "Value"形式でデータを格納両方

それらとして

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; 
     } 
    } 
... 
} 

実際には、結果はIHttpSessionStateオブジェクトに格納されます。

+1

これは、コードで、なぜ2つの機能がコンセプトを内在化するのに役立つのかを正確に示しているので、すばらしい答えです。私はセッションの状態で辞書や他のハッシュテーブルを使用していたことをすべて考えていたので、@ matthewの別のコメントのコメントが好きです。率直に言って、それに基づいて追加または変更する前に値がすでに存在していました。 – TonyG

+0

これは同じではありません:__key__が存在する場合、__value__は** _ update _ **ですが、__key__ __doesn't__が存在する場合、__value__を使用して** _ _ _を作成します__ ** SaveOrUpdate ** __メソッド。 – Adhemar

9

投稿した2つのコードスニペットは機能的に同じものです。どちらも、キーによって定義された特定のSessionオブジェクトを更新します(存在しない場合は作成します)。

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

と同じである。

Session["name"] = txtName.text;

最初の方法に基づく、第二文字列インデクサーベースです。両方とも、キーが保持する以前の値を上書きします。

+3

'Dictionary'とは対照的に、同じキーで2回辞書に' Add 'しようとすると、例外がスローされます。 'Dictionary'のインデクサは' Session'オブジェクトと同様に動作します(追加または更新され、例外はスローされません)。 – Matthew

+0

@Matthew素晴らしい追加のメモ... –

+0

@Mathew - 余分な注釈ありがとう –