2014-11-04 2 views

ответ

11

Вы можете использовать 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) 
5

Общий список имеет метод с именем 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 
    ..... 
+0

Я пробовал это раньше, я получаю ссылку на объект, не установленную в экземпляр объекта. – Medise

+0

@Medise: затем инициализируйте список. 'Public lsAuthors As New List (Of String)' –

+0

Какая кровавая ошибка, которую я сделал, что сработало, спасибо. – Medise

2

Чтобы проверить, присутствует ли в списке, вы можете использовать метод 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 

Примечание: построчно дается объяснение, как комментарии

0

Вы можете получить список соответствующих пунктов ваше состояние вот так:

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 
Смежные вопросы