检查字符串列表是否包含值

时间:2014-11-04 10:12:28

标签: .net vb.net list

我有:

Public lsAuthors As List(Of String)

我想在此列表中添加值,但在添加之前我需要检查确切的值是否已经在其中。我怎么知道这个?

4 个答案:

答案 0 :(得分:17)

您可以使用List.Contains

If Not lsAuthors.Contains(newAuthor) Then
    lsAuthors.Add(newAuthor)
End If

或使用LINQ Enumerable.Any

Dim authors = From author In lsAuthors Where author = newAuthor
If Not authors.Any() Then
    lsAuthors.Add(newAuthor)
End If

如果字符串已经在集合中,您也可以使用高效的HashSet(Of String)代替不允许重复的列表,并在HashSet.Add中返回False

 Dim isNew As Boolean = lsAuthors.Add(newAuthor)  ' presuming lsAuthors is a HashSet(Of String)

答案 1 :(得分:6)

泛型List有一个名为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"准系统包含没有注意到它们是相同的。
如果您必须管理这种情况,那么您需要

....
if Not lsAuthors.Contains(newAuthor, StringComparer.CurrentCultureIgnoreCase) Then
    .....

答案 2 :(得分: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

注意:逐行说明为注释

答案 3 :(得分: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