无法将ListBox.ObjectCollection转换为(类型化)数组

时间:2010-04-08 10:36:03

标签: c# string collections arrays listbox

我想将项目转换为String数组或我用来填充ListBox.DataSource的类型。该类型已重写ToString()但我似乎无法将其转换,甚至不能转换为String []。

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

2 个答案:

答案 0 :(得分:24)

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));

答案 1 :(得分:1)

Cast方法似乎不再可用。我想出了另一个解决方案:

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

CopyTo方法采用现有数组并在给定索引处插入项目并转发。

我不知道这是否非常有效,但它一致且易于编写。