我有一个对话框,询问客户的详细信息,它们会保存为列表
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
该名称将添加到列表中,并进一步显示在列表框中。我去添加相同的名称,它不会再添加到列表框中。我错过了什么吗?
答案 0 :(得分:3)
您可能希望使用List
,例如HashSet,而非使用Set
。
Sets
不允许重复,并且与Lists
的使用非常相似。如果集合已包含值,则Add
将返回false,并且不会添加该值。如果仍然添加,则值不完全相同(由Equals
和GetHashCode
方法定义)。
注意:对于字符串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中。