2011-12-20 14 views
9

जब कुछ इस तरह की कोशिश कर रहा एक InvalidCastException हो रही है:सूची <KeyValuePair <...,...>> IENumerable <object> में कनवर्ट नहीं कर सकता?

IEnumerable<object> test = (IEnumerable<object>)new List<KeyValuePair<string, int>>(); 

हालांकि, ऐसा किया काम:

IEnumerable<object> test = (IEnumerable<object>)new List<Dictionary<string, int>>(); 

तो बड़ा अंतर क्या है? एक KeyValuePair किसी ऑब्जेक्ट में क्यों परिवर्तित नहीं किया जा सकता है?

अद्यतन: मैं शायद कहना चाहिए कि यह काम किया:

object test = (object)KeyValuePair<string,string>; 

उत्तर

11

क्योंकि यह एक struct एक वर्ग है, और नहीं: http://msdn.microsoft.com/en-us/library/5tbh8a42.aspx

+0

आउच:

वैसे भी, आप सूची का उपयोग करना चाहते हैं, आप एक वस्तु में KeyValuePair संरचना परिवर्तित करने के लिए कास्ट विधि का उपयोग करने की जरूरत है। हाँ, यह बताता है। –

17

है ऐसा इसलिए है क्योंकि KeyValuePair<K,V> एक वर्ग नहीं है, है एक संरचना परिवर्तित करने के लिए IEnumerable<object> को सूची का मतलब होगा कि आप प्रत्येक कुंजी-मान पेयर लेने के लिए और यह बॉक्स करने के लिए है कि: यदि आप सूची में प्रत्येक आइटम परिवर्तित करने के लिए है के रूप में

IEnumerable<object> test = new List<KeyValuePair<string, int>>().Select(k => (object)k).ToList(); 

, तो आप बस कास्टिंग द्वारा ऐसा नहीं कर सकते खुद की सूची

2

KeyValuePair एक संरचना है और कक्षा वस्तु से प्राप्त नहीं होती है।

3

सब शब्दकोश सबसे पहले पहले से ही KeyValuePairs के संग्रह, इसलिए दूसरे उदाहरण एक वस्तु, नहीं KeyValuePairs करने के लिए पूरे शब्दकोश कास्टिंग जाता है।

IEnumerable<object> test = (IEnumerable<object>)new List<KeyValuePair<string, int>>().Cast<object>(); 
संबंधित मुद्दे