System.InvalidCastException: невозможно преобразовать объект типа SelectedObjectCollection в тип System.Collections.Generic.lEnumerable'1[System.String]
Мне нужна помощь в понимании этой ошибки времени выполнения. Я совершенно уверен, что проблема заключается в следующем, но не смог найти работающее решение.
Parallel.ForEach(строки)(Me.clb1.SelectedItems, Sub(clb1)
Parallel.ForEach(строки)(Me.CheckedListBox1.SelectedItems, Sub(xxx) <- Не знаю, что здесь происходит.
В сообщении об ошибке выделен весь Sub, но остальное было вырезано и вставлено из рабочего кода.
OfType будет работать, но смысл этого метода в том, чтобы фильтровать элементы по типу. В этом случае ОП хочет получить все предметы. Что необходимо, так это превратить IEnumerable в IEnumerable(Of T), для чего существует метод Cast(Of T).
Я заменил clb1 на то, что было сокращением. Кажется, сейчас у меня мертвый мозг, и я понимаю, о чем говорят. Может ли кто-нибудь дать мне пример или указать мне в правильном направлении.
Почитал инструкцию Лямбды и нашел пример попроще. До меня дошло, что мне нужно было сделать.
For cnt = 0 To ListBox1.Items.Count - 1
MyFiles.Add(ListBox1.Items(cnt))
Next
Parallel.ForEach(MyFiles, Sub(F)
Теперь мне нужно исправить код для обработки многопоточного кода, но это еще один вопрос, который я еще не готов задать. Спасибо.
ListBox.SelectedItems
— это специализированная коллекцияSelectedObjectCollection
, полученная из IList. Каждый элемент является объектом, а не строкой. Этот метод требуетIEnumerable<T>
или разделителя -- Не передавайте что-то с именемclb1
в Lambda -- Что, если вы измените его вclb1.SelectedItems.OfType(Of Object)
(удалив(Of String)
)? Какой тип на самом деле содержит каждый элемент в коллекции? У вас установленоOption Strict
наOn