我有:
Public lsAuthors As List(Of String)
我想在此列表中添加值,但在添加之前我需要检查确切的值是否已经在其中。我怎么知道这个?
答案 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