2010-04-08 11 views
7

मैं आइटम को स्ट्रिंग सरणी या उस प्रकार को रूपांतरित करना चाहता हूं जिसे मैंने ListBox.DataSource भरने के लिए उपयोग किया था। इस प्रकार ने ToString() को ओवरराइड किया है, लेकिन मुझे लगता है कि इसे परिवर्तित नहीं किया जा सकता है, स्ट्रिंग तक भी नहीं []।ListBox.ObjectCollection को एक (टाइप किए गए) सरणी में परिवर्तित नहीं कर सकता

String[] a = (String[])ListBox1.Items; 
Contacts[] b = (Contacts[])ListBox1.Items; 

उत्तर

22
string[] a = ListBox1.Items.Cast<string>().ToArray(); 

बेशक, अगर तुम सब a के साथ क्या करने की योजना इस पर पुनरावृति है, तो आप toArray कॉल करने के लिए() नहीं है। आप सीधे उपयोग कर सकते हैं IEnumerable<string>Cast<string>() से लौटे, जैसे:

foreach (var s in ListBox1.Items.Cast<string>()) { 
    do_something_with(s); 
} 

या, आप किसी तरह से संपर्क करने के लिए तार कन्वर्ट करने के लिए है, तो आप कुछ इस तरह कर सकते हैं:

IEnumerable<Contacts> c = ListBox1.Items.Cast<string>().Select(s => StringToContact(s)); 
+0

मुझे इसे केवल एक विधि के पैरामीटर के रूप में पास करने के लिए इसे परिवर्तित करना पड़ा। यह केवल स्ट्रिंग [] या संपर्क [] स्वीकार कर लिया। बहुत उपयोगी, धन्यवाद! –

1

Cast विधि नहीं करता है ऐसा लगता है कि अब उपलब्ध नहीं है। मैं एक अन्य समाधान के साथ आया था:

String[] array = new String[ListBox.Items.Count] 
ListBox.Items.CopyTo(array, 0); 

CopyTo विधि एक मौजूदा सरणी लेता है और दिए गए इंडेक्स और आगे पर आइटम सम्मिलित करें।

मुझे नहीं पता कि यह बहुत ही कुशल है, लेकिन इसके लगातार और लिखने में आसान है।

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