Не удалось преобразовать ListBox.ObjectCollection в (типизированный) массив - PullRequest
8 голосов
/ 08 апреля 2010

Я хочу преобразовать элементы в массив String или тип, который я использовал для заполнения ListBox.DataSource.Тип переопределил ToString (), но я не могу преобразовать его, даже в String [].

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

Ответы [ 2 ]

24 голосов
/ 08 апреля 2010
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);
}

Или, если у вас есть какой-то способ конвертации строк в Контакты, вы можете сделать что-то вроде этого:*

1 голос
/ 19 августа 2015

Метод Cast, похоже, больше не доступен. Я придумал другое решение:

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

Метод CopyTo берет существующий массив и вставляет элементы по указанному индексу и вперед.

Я не знаю, насколько это эффективно, но оно последовательное и простое в написании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...