2011-02-03 15 views
5

मैं इससी # कास्टिंग सूची <ushort> सूची में <short>

List<ushort> uList = new List<ushort>() { 1, 2, 3 }; 
List<short> sList = uList.Cast<short>().ToList(); 

क्या करना चाहते हैं, लेकिन मैं InvalidCastException मिल "निर्दिष्ट डाली मान्य नहीं है।"

मैं उपर्युक्त संग्रह को तेज़ और कुशल कैसे बना सकता हूं?

धन्यवाद।

+1

[पेचीदा Enumerable.Cast InvalidCastException] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/445471/puzzling-enumerable-cast-invalidcastexception) – Ani

+1

@ एनी: मैं उस पर एक डुप्लिकेट नहीं मानूंगा क्योंकि मुझे पता है कि आप 'int' को 'लंबा' नहीं डाल सकते हैं (वे अलग-अलग आकार हैं), लेकिन मैं उम्मीद करता हूं कि 'ushort' से' short' तक कास्ट होगा संभव है क्योंकि वे एक ही आकार के हैं। दूसरे शब्दों में, '(ushort []) (ऑब्जेक्ट) नया छोटा [] {0, -1} 'पूरी तरह मान्य सी # है। – Gabe

+0

@Gabe: यह वही मुद्दा है। '(लघु) ((ushort) 1)' वैध सी # है जैसा कि (लंबी) ((int) 1) '(स्पष्टता के लिए अनावश्यक कलाकार) है। मुद्दा संख्यात्मक रूपांतरण और अनबॉक्सिंग मिश्रण के साथ करना है। http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/representation-and-identity.aspx – Ani

उत्तर

7
List<short> sList = uList.Select(i => (short)i).ToList(); 
+0

मैं इस समाधान को पसंद करता हूं, आईएमओ, क्योंकि यह मानक LINQ है। –

+0

मैंने यहां वापस जांचने से पहले इसे इस तरह कार्यान्वित किया था, और यह ठीक काम करता था। मुझे यकीन नहीं है कि इसके बीच प्रदर्शन अंतर है और ConvertAll का उपयोग कर रहा है। –

9

आप ConvertAll इस्तेमाल कर सकते हैं:

List<short> sList = uList.ConvertAll(x => (short)x); 
संबंधित मुद्दे