2012-04-04 8 views
20

किसी ने मुझसे करने के लिए बीच का अंतर कृपया समझा सकता है:सत्र के बीच क्या अंतर है। जोड़ें ("कुंजी", मान) और सत्र ["कुंजी"] = मूल्य?

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

यह एक साक्षात्कार सवाल था और मैं ने उत्तर दिया कि सी # में key = "Value"Dictionary तरह प्रारूप कक्षा में दोनों दुकान डेटा।

मैं सही हूँ, या वहाँ कोई अंतर है?

+2

मैं वहाँ कुछ अच्छा MSDN इस बारे में प्रलेखन यकीन है। शायद आप इसे स्वयं खोज सकते हैं और अगले साक्षात्कार के लिए बेहतर तैयार हो सकते हैं। – jpm

+13

यह एक * भयानक * साक्षात्कार प्रश्न है। –

+2

@EricLippert, मैं पूरी तरह से सहमत हूं। अधिकांश संगठनों में एक डेवलपर को भर्ती करने की प्रक्रिया बहुत टूटी हुई है। – SolutionYogi

उत्तर

18

खोज रहे हैं हमें पता चलता है कि वे एक ही वास्तव में कर रहे हैं।

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 तरह प्रारूप कक्षा में दोनों

भंडारण डेटा के रूप में।

वे वास्तव में परिणाम को IHttpSessionState ऑब्जेक्ट में संग्रहीत करते हैं।

+1

के लिए यह एक बढ़िया जवाब है, क्योंकि यह कोड में से पता चलता वास्तव में क्यों दो कार्य बराबर जो अवधारणा को आत्मसात करने में मदद करता है। मैं शब्दकोश के बारे में @matthew ने एक और टिप्पणी में नोट की तरह है, क्योंकि मुझे लगता है कि साथ सभी सोच किया गया है हम एक शब्दकोश या सत्र स्थिति में अन्य हैश तालिका का उपयोग कर रहे थे, और स्पष्ट रूप से मैं हमेशा करता है, तो देखने के लिए जाँच करने के लिए मूर्खतापूर्ण नृत्य किया है उस पर आधारित जोड़ने या संशोधित करने से पहले एक मूल्य पहले से मौजूद था। – TonyG

+0

समान नहीं है ऐसा इसलिए है क्योंकि: लेकिन जब __key__ मौजूद __value__ ** _ अद्यतन _ ** है अगर __key__ __doesn't__ मौजूद वे ** _ बनाने _ ** __value__, अगर की तरह __ ** SaveOrUpdate ** __ विधि के साथ। – Adhemar

9

दो कोड स्निपेट तुम्हें तैनात एक और कार्यक्षमता में ही हैं। कुंजी द्वारा परिभाषित एक निश्चित सत्र ऑब्जेक्ट दोनों अपडेट (या बनाएं यदि यह अस्तित्व में नहीं है)।

Session["name"] = txtName.text;

पहले, विधि आधारित है, जहां दूसरी स्ट्रिंग इंडेक्सर पर आधारित है:

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

के समान है। दोनों कुंजी द्वारा आयोजित पिछले मान को ओवरराइट करते हैं। HttpSessionState के लिए कोड में

+3

'डिक्शनरी' के विपरीत, यदि आप एक ही कुंजी के साथ दो बार एक शब्दकोश में 'add'' कोशिश करते हैं, तो यह अपवाद फेंक देगा। 'डिक्शनरी' का इंडेक्सर 'सत्र' ऑब्जेक्ट के समान काम करता है (यह या तो जोड़ या अपडेट करेगा, और अपवाद फेंक नहीं देगा)। – Matthew

+0

@Matthew महान अतिरिक्त टिप्पणी ... –

+0

@Mathew - धन्यवाद अतिरिक्त टिप्पणी –

संबंधित मुद्दे