我有:
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)
而不是不允许重复的列表,如果字符串已经在集合False
中HashSet.Add
则返回.
Dim isNew As Boolean = lsAuthors.Add(newAuthor) ' presuming lsAuthors is a HashSet(Of String)
Run Code Online (Sandbox Code Playgroud)
泛型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)
归档时间: |
|
查看次数: |
44592 次 |
最近记录: |