आपको एक प्रतिलिपि करने की आवश्यकता होगी, लेकिन यह शायद एक अच्छी बात है। सी # 2 में, आपका वर्तमान कोड लगभग सबसे साफ है जिसे आप बना सकते हैं। यह आपके मूल्यों को सीधे आपके मूल्यों (List<MyType> list = new List<MyType>(valueCollection);
) से बनाकर सुधार किया जाएगा, लेकिन एक प्रतिलिपि अभी भी आवश्यक होगी।
साथ # 3 सी LINQ का उपयोग करते हुए, हालांकि, आप करने में सक्षम हो जाएगा:
myDictionary.Values.ToList();
कहा जा रहा है, मैं नहीं (शायद) की नकल से बचने के लिए कोशिश करेंगे। अपने मूल्यों की एक प्रति लौटाना सुरक्षित हो जाता है, क्योंकि यह कॉलर को आपके संग्रह को संशोधित करने का प्रयास करते समय समस्याएं उत्पन्न करने से रोकता है। एक प्रतिलिपि लौटकर, कॉलर list.Add(...)
या list.Remove(...)
कर सकता है, जिससे आपकी कक्षा की समस्याएं उत्पन्न हो सकती हैं।
संपादित करें: नीचे अपनी टिप्पणी को देखते हुए अगर सभी आप चाहते है एक IEnumerable<T>
एक गणना के साथ, आप बस लौट सकते हैं ICollection<T>
। यह सीधे ValueCollection
द्वारा कार्यान्वित किया जाता है, जिसका अर्थ आप बस सीधे अपने शब्दकोश के मूल्यों लौट सकते हैं, कोई नकल के साथ:
private ICollection<MyType> ConvertToList(Dictionary<int, MyType>.ValueCollection valueCollection)
{
return valueCollection;
}
(दी, इस पद्धति वास्तव में इस मामले में बेकार हो जाता है - लेकिन मैं के लिए यह प्रदर्शित करने के लिए करना चाहता था आप ...)
स्रोत
2010-03-29 19:12:19
अब तक बनाए गए हर समाधान में पूरे संग्रह की प्रतिलिपि शामिल है। ** प्रश्न पढ़ें **। – SLaks
@Slaks: मैंने इसे सीधे मेरे जवाब में संबोधित किया ... (जिसमें अभी भी प्रतिलिपि शामिल है, हालांकि) –
क्या कुंजी टाइप "int" के लिए कोई प्रासंगिकता है, या यह एक मनमाना प्रकार है? –