у меня есть:Проверьте список строк содержит значение
Public lsAuthors As List(Of String)
Я хочу добавить значения в этот список, но перед добавлением мне нужно проверить, если точное значение уже в нем. Как мне это понять?
у меня есть:Проверьте список строк содержит значение
Public lsAuthors As List(Of String)
Я хочу добавить значения в этот список, но перед добавлением мне нужно проверить, если точное значение уже в нем. Как мне это понять?
Вы можете использовать List.Contains
:
If Not lsAuthors.Contains(newAuthor) Then
lsAuthors.Add(newAuthor)
End If
или с LINQs Enumerable.Any
:
Dim authors = From author In lsAuthors Where author = newAuthor
If Not authors.Any() Then
lsAuthors.Add(newAuthor)
End If
Вы можете также использовать эффективную HashSet(Of String)
вместо списка, который не позволяет дублировать и возвращает False
в HashSet.Add
, если строка уже была в наборе.
Dim isNew As Boolean = lsAuthors.Add(newAuthor) ' presuming lsAuthors is a HashSet(Of String)
Общий список имеет метод с именем Contains, который возвращает значение true, если сопоставитель по умолчанию для выбранного типа находит элемент, соответствующий критериям поиска.
Для List (Of String) это нормальное сравнение строк, так что ваш код может быть
Dim newAuthor = "Edgar Allan Poe"
if Not lsAuthors.Contains(newAuthor) Then
lsAuthors.Add(newAuthor)
End If
В качестве примечания, сравнение по умолчанию для строк считает две строки различны, если они не имеют в том же случае. Поэтому, если вы попытаетесь добавить автора под названием «edgar allan poe», и вы уже добавили его с именем «Edgar Allan Poe», barebone Contains не замечает, что они одинаковы.
Если вы должны справиться с этой ситуацией, то вам нужно
....
if Not lsAuthors.Contains(newAuthor, StringComparer.CurrentCultureIgnoreCase) Then
.....
Чтобы проверить, присутствует ли в списке, вы можете использовать метод list.Contains() элемент. Если вы используете кнопку нажмите, чтобы заполнить список строк, а затем посмотреть код:
Public lsAuthors As List(Of String) = New List(Of String) ' Declaration of an empty list of strings
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' A button click populates the list
If Not lsAuthors.Contains(TextBox2.Text) Then ' Check whether the list contains the item that to be inserted
lsAuthors.Add(TextBox2.Text) ' If not then add the item to the list
Else
MsgBox("The item Already exist in the list") ' Else alert the user that item already exist
End If
End Sub
Примечание: построчно дается объяснение, как комментарии
Вы можете получить список соответствующих пунктов ваше состояние вот так:
Dim lsAuthors As List(Of String)
Dim ResultData As String = lsAuthors.FirstOrDefault(Function(name) name.ToUpper().Contains(SearchFor.ToUpper()))
If ResultData <> String.Empty Then
' Item found
Else
' Item Not found
End If
Я пробовал это раньше, я получаю ссылку на объект, не установленную в экземпляр объекта. – Medise
@Medise: затем инициализируйте список. 'Public lsAuthors As New List (Of String)' –
Какая кровавая ошибка, которую я сделал, что сработало, спасибо. – Medise