2015-04-08 4 views
0

У меня есть два списка, один содержит одобренный список элементов, который используется для циклического перебора элементов listbox1, чтобы увидеть, содержат ли в нем элементы из какого-либо элемента из (например, «.txt»)vb.net удаление элементов из списка, которые находятся в другом списке

Если изделие не содержит одобренного товара, оно удаляется. Проблема заключается в том, что когда я добавляю второй одобренный элемент, например «.pdf», все файлы «.txt» также удаляются из списка из-за цикла.

Любые идеи были бы оценены, чтобы исправить это, я хочу сохранить все элементы, одобренные в списке! Благодаря

For Each item As Object In Me.lstApprovedItems.Items 
For i As Integer = ListBox1.Items.Count - 1 To 0 Step -1 
    If Not ListBox1.Items(i).Contains(item) Then 
     ListBox1.Items.RemoveAt(i) 
    End If 
Next 
+0

Я использовал этот метод в конце. Отлично! http://stackoverflow.com/a/29656168/4764366 – Pez

ответ

1

Ну да, если 'товар' является ".pdf", то ListBox1.Items (I) не содержит 'элемент', если ListBox1.Items (я) является ".txt". Вместо медленного неэффективного вложенного цикла For попробуйте вместо этого использовать LINQ. Как насчет чего-то подобного?

Dim list1 as list(of string) = (From Item in Listbox1.Items Select Item Where lstApprovedItems.items.Contains(Item)).tolist() 

Мой синтаксис на части Содержит немного, но вы можете видеть, куда я иду.

Это даст вам список всех элементов, находящихся в списке Listbox1.items, которые также находятся в файле lstApprovedItems.items. Затем вы можете переустановить свой списокbox1, чтобы использовать это.

+0

Я получаю эту ошибку: Значение типа 'System.Collections.Generic.List (Of Object)' не может быть преобразовано в 'System.Collections.Generic.List (Of String) '. , но я вижу, где вы собираетесь с ним, спасибо! – Pez

+0

А, это на самом деле имеет смысл. «Item» - это объект, а не строка. Думаю, вам понадобится что-то вроде «Item.Content». –

Смежные вопросы