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

Med*_*ise 11 .net vb.net list

我有:

Public lsAuthors As List(Of String)
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*ter 18

你可以使用List.Contains:

If Not lsAuthors.Contains(newAuthor) Then
    lsAuthors.Add(newAuthor)
End If
Run Code Online (Sandbox Code Playgroud)

或者使用LINQ Enumerable.Any:

Dim authors = From author In lsAuthors Where author = newAuthor
If Not authors.Any() Then
    lsAuthors.Add(newAuthor)
End If
Run Code Online (Sandbox Code Playgroud)

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

 Dim isNew As Boolean = lsAuthors.Add(newAuthor)  ' presuming lsAuthors is a HashSet(Of String)
Run Code Online (Sandbox Code Playgroud)


Ste*_*eve 6

泛型List有一个名为Contains的方法,如果选择类型的默认比较器找到与搜索条件匹配的元素,则返回true.

对于List(Of String),这是正常的字符串比较,因此您的代码可以是

Dim newAuthor = "Edgar Allan Poe"
if Not lsAuthors.Contains(newAuthor) Then
    lsAuthors.Add(newAuthor)
End If 
Run Code Online (Sandbox Code Playgroud)

作为旁注,字符串的默认比较如果它们没有相同的情况,则认为两个字符串不同.因此,如果您尝试添加名为"edgar allan poe"的作者并且您已经添加了一个名为"Edgar Allan Poe"的作者,那么准系统Contains就没有注意到它们是相同的.
如果你必须管理这种情况,那么你需要

....
if Not lsAuthors.Contains(newAuthor, StringComparer.CurrentCultureIgnoreCase) Then
    .....
Run Code Online (Sandbox Code Playgroud)