检查名称是否已列在列表中

时间:2012-01-07 17:30:28

标签: vb.net

我有一个对话框,询问客户的详细信息,它们会保存为列表

Private fNames As List(Of String)

我有一个方法可以检查名称是否在列表中,如果是,则返回true,如果不是则返回false。

Public Function isNameInList(ByVal myName As String) As Boolean
   Return fNames.Contains(myName)
End Function

如果返回的值为false,则添加名称。

Public Sub addName(ByVal myName As String)
        If isNameInList(myName) = False Then
            fNames.Add(myName)
        End If
End Sub

该名称将添加到列表中,并进一步显示在列表框中。我去添加相同的名称,它不会再添加到列表框中。我错过了什么吗?

2 个答案:

答案 0 :(得分:3)

您可能希望使用List,例如HashSet,而非使用Set

根据定义,

Sets不允许重复,并且与Lists的使用非常相似。如果集合已包含值,则Add将返回false,并且不会添加该值。如果仍然添加,则值不完全相同(由EqualsGetHashCode方法定义)。


注意:对于字符串Equals是大小写并且对空格敏感,因此您可能需要Trim字符串并转换为一个案例或在比较时使用StringComparer.OrdinalIgnoreCase

myString.Trim().Equals(myOtherString.Trim(), StringComparer.OrdinalIgnoreCase)

如果您希望做更多工作,您甚至可以自己编写StringComparer

答案 1 :(得分:1)

比较区分大小写。这意味着“乔”和“乔”是不同的,都将被添加。这可能是你的问题吗?

我已经测试了你的代码。它似乎工作。但是,您也在谈论列表框。你在那里做错了吗?


如果您将列表声明为System.ComponentModel.BindingList(Of String)而不是List(Of String),然后将此列表分配到列表框,如下所示:

ListBox1.DataSource = fNames

然后,当您将新名称添加到fNames时,新名称将自动显示在ListBox中。