2012-04-04 18 views
20

ai đó có thể vui lòng giải thích cho tôi sự khác biệt giữa:Sự khác biệt giữa Phiên.Thêm ("khóa", giá trị) và Phiên ["khóa"] = giá trị là gì?

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

Đó là một câu hỏi phỏng vấn và tôi đã trả lời rằng cả hai lưu trữ dữ liệu trong key = "Value" định dạng như Dictionary lớp trong C#.

Tôi có đúng hay không có sự khác biệt nào?

+2

Tôi chắc chắn có một số tài liệu msdn tốt đẹp về vấn đề này. Có lẽ bạn có thể tự mình nghiên cứu và chuẩn bị tốt hơn cho cuộc phỏng vấn tiếp theo. – jpm

+13

Đó là câu hỏi phỏng vấn * khủng khiếp *. –

+2

@EricLippert, tôi hoàn toàn đồng ý. Quy trình thuê nhà phát triển bị phá vỡ cao ở hầu hết các tổ chức. – SolutionYogi

Trả lời

18

Nhìn vào mã cho HttpSessionState cho chúng ta thấy rằng thực tế chúng giống nhau.

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

Đối với cả hai

Lưu trữ dữ liệu trong key = "Value" định dạng như Dictionary lớp trong C#.

Chúng thực sự lưu kết quả trong đối tượng IHttpSessionState.

+1

Đây là một câu trả lời tuyệt vời vì nó cho thấy trong mã chính xác lý do tại sao hai chức năng là tương đương giúp để nội hóa khái niệm này. Tôi thích ghi chú trong phần bình luận khác của @matthew về Dictionary, bởi vì tôi đã từng nghĩ rằng chúng tôi đang sử dụng một từ điển hoặc bảng băm khác trong trạng thái phiên, và thẳng thắn tôi luôn thực hiện điệu nhảy ngớ ngẩn để kiểm tra xem một giá trị đã tồn tại trước khi thêm hoặc sửa đổi dựa trên đó. – TonyG

+0

Đó là không giống nhau vì: Khi __key__ tồn tại các __value__ là ** _ cập nhật _ ** nhưng nếu __key__ __doesn't__ tồn tại họ ** _ tạo _ ** với __value__, nếu như __ ** SaveOrUpdate ** __ phương pháp. – Adhemar

9

Hai đoạn mã bạn đăng là một và giống nhau về chức năng. Cả hai cập nhật (hoặc tạo ra nếu nó không tồn tại) một đối tượng Session nhất định được xác định bởi khóa.

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

là giống như:

Session["name"] = txtName.text;

Đầu tiên là phương pháp dựa trên, nơi thứ hai là chuỗi indexer-based. Cả hai đều ghi đè lên giá trị trước đó được giữ bởi khóa.

+3

Ngược lại với một 'Từ điển', nếu bạn thử và' Thêm' vào một từ điển hai lần với cùng một khóa, nó sẽ ném một ngoại lệ. Trình chỉ mục của một từ điển '' hoạt động tương tự như đối tượng 'Session' (nó sẽ thêm hoặc cập nhật, và sẽ không ném một ngoại lệ). – Matthew

+0

@Matthew thêm lưu ý tuyệt vời ... –

+0

@Mathew - Cảm ơn bạn thêm các lưu ý –

Các vấn đề liên quan