Вы можете написать
Dim result = listBox1.Items.OfType(Of String).Intersect(textBox1.Lines)
результат имеет тип IEnumerable(Of String)
.То есть вы можете использовать его в For Each или добавить .ToList
или .ToArray
, чтобы получить коллекцию.
Обратите внимание, что совпадение чувствительно к регистру.Если вы хотите игнорировать регистр, вы можете написать
Dim result = listBox1.Items.OfType(Of String) _
.Intersect(textBox1.Lines, StringComparer.OrdinalIgnoreCase)
Поскольку элементы ListBox возвращаются как объекты, я использовал listBox1.Items.OfType(Of String)
для преобразования их в строки.
AsЯ вижу в примере кода, который вы добавили, вы сравниваете строки из 2 текстовых блоков и объединяете результат в 3-ю, вы можете сделать это с помощью этих двух строк кода
Dim result = textBox1.Lines.Intersect(textBox2.Lines, StringComparer.OrdinalIgnoreCase)
txt_match.Text = String.Join(vbNewLine, result)
Если вы хотите сравнить элементы 2 ListBoxes
Dim r = listBox1.Items.OfType(Of String) _
.Intersect(listBox2.Items.OfType(Of String), StringComparer.OrdinalIgnoreCase)
Intersect
работает с любыми двумя перечислениями или коллекциями одного типа
A.Intersect(B)
возвращает IEnumerable(Of T)
, где оба A
и B
сами по себе IEnumerable(Of T)
.Поэтому не имеет значения, используете ли вы строки TextBox
, Items
ListBox
, приведенные к T
, или массивы или List(Of T)
или что-то еще.
Ваш код не работает из-за 2 разных ошибок:
- У вас есть
Option Strict Off
.Это скрывает ошибку, показывающую, что вы вызываете неправильную перегрузку Split
.VB пытается преобразовать vbNewLine
(который является строкой) в символ и вызывает Split
с первым символом, найденным в vbNewLine
.Используйте Option Strict On
в своем проекте, и вы получите ошибку компиляции.Напишите это вместо
comparear = compare.Split(New String() {vbNewLine}, StringSplitOptions.RemoveEmptyEntries)
listar = list.Split(New String() {vbNewLine}, StringSplitOptions.RemoveEmptyEntries)
- Ваше совпадение чувствительно к регистру.Вместо этого сравните, как это
If listar(p).ToLowerInvariant = comparear(i).ToLowerInvariant Then