2012-02-29 18 views
8

मैं सरणी IList कनवर्ट करना चाहते हैं: स्रोत सरणी में कम से कम एक तत्व डाली नहीं किया जा सका: क्यों मैं System.InvalidCastException मिलसी # में सरणी में कनवर्ट IList

IList list = new ArrayList(); 
list.Add(1); 
Array array = new Array[list.Count]; 
list.CopyTo(array, 0); 

: कृपया मेरे कोड देखें गंतव्य सरणी प्रकार पर नीचे? यह कैसे हल किया जा सकता है कि मैं ArrayList का उपयोग सूची चर के प्रकार के रूप में नहीं कर सकता?

अद्यतन 1: मैं .NET 1.1 का उपयोग करता हूं। तो मैं जेनेरिक, लिंक और इतने पर उपयोग नहीं कर सकता। मैं बस सबसे आम मामले के लिए परिणाम प्राप्त करना चाहता हूं - उदाहरण के रूप में पूर्णांक दिया गया था, मुझे इस कोड को सभी प्रकार के लिए काम करने की आवश्यकता है, इसलिए मैं ऐरे का उपयोग करता हूं (शायद मैं ऐरे का उपयोग करने में गलत हूं लेकिन मुझे एक बार फिर, सामान्य मामला चाहिए)।

+3

ArrayList अप्रचलित है। इसके बजाए 'सूची ' का उपयोग करें। – asawyer

+1

क्या आप .NET 2.0 का उपयोग कर रहे हैं? यदि आप नहीं हैं तो यह सामान्य संग्रह के साथ बहुत आसान हो जाता है। –

+1

http://stackoverflow.com/questions/268671/best-way-to-convert-ilist-or-ienumerable-to-array – Jason

उत्तर

26

साथ खुश हो जाएगा आप Array मूल्यों की एक सरणी बना रहे हैं। 1 int है, Array नहीं। आप होना चाहिए:

IList list = new ArrayList(); 
list.Add(1); 
Array array = new int[list.Count]; 
list.CopyTo(array, 0); 

या, आदर्श, गैर सामान्य प्रकार का उपयोग नहीं करते के साथ ... उपयोग ArrayList के बजाय सूची, IList<T> के बजाय IList आदि

संपादित करें शुरू करने के लिए: ध्यान दें कि तीसरी लाइन आसानी से हो सकता है:

Array array = new object[list.Count]; 
बजाय

+0

अच्छा पकड़ो! मैं सोच रहा था कि वह ऐरे ऑब्जेक्ट पर एक कन्स्ट्रक्टर का उपयोग कर रहा था। –

+1

@ जोन अगर मुझे सरणी में तत्वों के प्रकार नहीं पता हैं तो मुझे क्या करना चाहिए? पूर्णांक केवल उदाहरण था - मुझे अधिक सामान्य दृष्टिकोण (जेनेरिक के बिना) –

+0

@MichaelZ की आवश्यकता है: आप इसके बजाय 'ऑब्जेक्ट []' का उपयोग कर सकते हैं। –

4

मुझे आश्चर्य है कि

Array array = new Array[list.Count]; 

भी संकलित कर रहा हूँ, लेकिन यह क्या आप इसे करना चाहते हैं नहीं है।

object[] array = new object[list.Count]; 

और, मानक टिप्पणी का उपयोग करें: आप सी # 3 का उपयोग कर सकते या बाद में, जितना संभव हो उतना ArrayList से बचने के है। आप शायद एक List<int>

+0

जोड़ता है यह संकलित करता है क्योंकि यह सरणी की सरणी है। –

15

आप कास्ट और toArray उपयोग कर सकते हैं:

Array array = list.Cast<int>().ToArray(); 
संबंधित मुद्दे