2012-04-04 2 views
20

누군가가 나에게 사이의 차이를 설명시겠습니까 : 그것은 인터뷰 질문했다Session.Add ("key", value)와 Session [ "key"] = value의 차이점은 무엇입니까?

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

을하고 나는 대답이 C#에서 key = "Value" 형식 Dictionary 같은 클래스에서 모두 데이터를 저장.

맞습니까? 아니면 어떤 차이가 있습니까?

+2

나는 이것에 관한 멋진 msdn 문서가 있다고 확신한다. 아마 당신은 스스로 조사하고 다음 인터뷰에 대비할 수있을 것입니다. – jpm

+13

그건 * 끔찍한 인터뷰 질문입니다. –

+2

@EricLippert, 전적으로 동의합니다. 개발자 고용 프로세스는 대부분의 조직에서 크게 파탄됩니다. – SolutionYogi

답변

18

코드를 보면 HttpSessionState은 실제로 동일하다는 것을 보여줍니다. C#에서 key = "Value" 형식 Dictionary 같은 클래스에서 모두

데이터 저장 그들에게로

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

이것은 두 가지 기능이 개념을 내면화하는 데 도움이되는 이유를 정확하게 코드에 표시하기 때문에 훌륭한 대답입니다. 나는 또 다른 코멘트에있는 주석을 좋아한다. Dictionary에 관한 @matthew에 의한 것이다. 왜냐하면 나는 우리가 세션 상태에서 사전이나 다른 해시 테이블을 사용하고 있다는 것을 항상 생각해 왔기 때문에, 솔직히 나는 어리석은 춤을 값은 이미 추가되거나 수정되기 전에 이미 존재합니다. – TonyG

+0

그 이유는 다음과 같습니다. __key_ __가있는 경우 __value__은 ** _ update _ **입니다. 그러나 __key__이 __doesn't__이 존재하면 __value__와 함께 ** _ _ _를 만듭니다. 같은 경우 __ ** SaveOrUpdate ** __ 메서드. – Adhemar

9

게시 한 두 개의 코드 스 니펫은 하나의 기능에서 동일합니다. 둘 다 키에 의해 정의 된 특정 Session 객체를 업데이트 (또는 존재하지 않으면 생성)합니다. 두번째 스트링 인덱서 기반이고

Session["name"] = txtName.text;

첫째는 기반 방법이다

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

는 상기와 동일하다. 둘 다 키가 보유한 이전 값을 겹쳐 씁니다.

+3

'Dictionary'와는 달리 사전에'Add '를하면 같은 키로 두 번 사전에'Add'하면 예외가 발생합니다. 'Dictionary'의 인덱서는'Session' 객체와 비슷하게 작동합니다 (추가 또는 업데이트되며 예외를 throw하지 않습니다). – Matthew

+0

@Matthew 위대한 추가 참고 사항 ... –

+0

@Mathew - 추가 노트를 주셔서 감사합니다. –

관련 문제