2011-05-27 10 views
10

अन्य प्रश्न हैं जैसे कि KeyValuePair बनाम IDictionary, लेकिन मुझे लगता है कि यह थोड़ा अलग है।KeyValuePair बनाम NameValueCollection

NameValueCollection एक स्ट्रिंग कुंजी और स्ट्रिंग मान लेता है।

KeyValuePair एक शब्दकोश की तरह है, तो आप इसे बताने के लिए किस प्रकार कुंजी और मान है।

मुझे समझ नहीं आता क्यों NameValueCollection मौजूद है। स्ट्रिंग प्रकारों के साथ KeyValuePair प्रारंभ करना पर्याप्त लगता है। मैंने यह भी देखा कि NameValueCollection में इसके लिए कुछ और तरीके उपलब्ध हैं, लेकिन फिर से दोनों वर्गों को एक में क्यों विलय नहीं करते?

+10

एक 'एक शब्दकोश की तरह नहीं KeyValuePair'। यह केवल एक टुपल है जिसमें कुंजी और मान होता है। –

+0

@pst, एक शब्दकोश कुंजी/मूल्य जोड़े की एक सूची लेता है। मैं एक अंतर देखने में असफल रहा हूँ। –

+0

@ निक 'var kvp = new keyValuePair ("हैलो", "वर्ल्ड!") '- [KeyValuePair ] (http://msdn.microsoft.com/en-us/library/5tbh8a42। एएसपीएक्स) –

उत्तर

13

एक KeyValuePair एक शब्दकोश की तरह नहीं। यह केवल एक टुपल है जिसमें कुंजी और मान होता है।

NameValueCollection क्या को मात्रा में एक IList<KeyValuePair<string,IList<string>>> (ध्यान दें कि NameValueCollection पहले का जेनरिक) पर आवरण है - Get(string) जैसे कार्य O(n) कर रहे हैं और आइटम (एक या अधिक मूल्यों को सूचकांक और प्रत्येक कुंजी नक्शे से दिलवाया जा सकता है इस से अलग है एक Dictionary<string,string>)।

इस के लिए एक कारण the NameValueCollection documentation में समझाया गया है:

इस वर्ग के हेडर, क्वेरी स्ट्रिंग और प्रपत्र डेटा के लिए इस्तेमाल किया जा सकता है।

नए "प्रतिस्थापन"कुछ समान व्यवहार के साथ NameValueCollection के लिए डेटा संरचना Lookup<string,string> है। (हालांकि, यह सीधे उसी ऑपरेशन का समर्थन नहीं करता है क्योंकि स्पेंडर नोट्स के रूप में अपरिवर्तनीय है।)

हैप्पी कोडिंग।

+1

इस परिदृश्य में लुकअप के साथ मुख्य समस्या यह है कि यह अपवर्तनीय है, NaveValueCollection के विपरीत, जिसे जोड़ा जा सकता है। इस प्रकार, यह वास्तव में एक "प्रतिस्थापन" नहीं है, लेकिन समान व्यवहार है। – spender

3

NameValueCollection नेट 1.0 में मौजूदा और 1.1, KeyValuePair एक सामान्य प्रकार है और 2.0 जब तक नेट के लिए नहीं जोड़ा गया है। System.Collections.Specialized में सभी कक्षाएं जेनेरिकों के अतिरिक्त भविष्यवाणी करती हैं; इसमें कुछ दृढ़ता से टाइप किया गया है (विशेष रूप से यदि आप करेंगे) तो उपयोग के लिए जब आपको वही है जो उपयोगकर्ताओं को ऑब्जेक्ट से स्ट्रिंग में डालना नहीं है।

0

KeyValuePair घटक आप पुनरावृति करने के लिए एक Dictionary

var dictionary = new Dictionary<int,long> 

foreach(var kvp in dictionary) 
{ 
    // kvp is KeyValuePair<int,long>. kvp.Key is the int key and kvp.Value is the long value for the key 
} 

NameValueCollection इंडेक्स करने योग्य है का उपयोग करें।

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