2010-04-08 7 views
7

Öğeleri bir String dizisine veya ListBox.DataSource doldurmak için kullandığım türe dönüştürmek istiyorum. Tür, ToString() 'i geçersiz kılar ancak String [] için bile dönüştürülmemiş gibi görünmüyor. Eğer a yapmak plan her yerinde yinelerler iseListBox.ObjectCollection bir (tip) diziye dönüştürülemiyor

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

cevap

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

Elbette, siz() ToArray aramak zorunda değilsiniz. Doğrudan IEnumerable<string>, Cast<string>() dönen kullanabilirsiniz örneğin:

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

Veya, Kişilere dizeleri dönüştürmek için bir yol varsa, böyle bir şey yapabilirsiniz:

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

Sadece bir parametreye bir yöntem olarak aktarmak için onu dönüştürmem gerekiyordu. Sadece String [] veya Contact [] 'i kabul etti. Çok yardımcı, teşekkürler! –

1

Cast yöntemi doesn Artık müsait değil gibi görünüyor. Bir diğer çözüm geldi:

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

CopyTo yöntem mevcut bir diziyi alır ve verilen indeksi ve forvette öğeleri yerleştirin.

Bunun çok verimli olup olmadığını bilmiyorum, ancak tutarlı ve yazması kolay.