2012-01-07 117 views
1

我有詢問顧客的詳細信息的對話框,將它們保存爲一個列表檢查,看是否名已在列表

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

「相同」的名字都在同一個案例中嗎?在VB.Net中,「Bob」和「bob」不相等。我沒有看到你在這裏有什麼問題。你能告訴我們你的代碼調用addName嗎? – Aaron 2012-01-07 17:38:39

+0

'我錯過了什麼'標點符號。 – 2012-01-07 18:03:09

+0

感謝您的有用評論。注意到並永遠不會讓它再次發生! – user445714 2012-01-07 18:07:38

回答

3

而不是使用List您可能想要使用Set,如HashSet

Sets顧名思義,不允許重複,並且在使用中與Lists非常相似。如果一個集合已經包含一個值,則Add將返回false,並且該值將不會被添加。如果仍然添加,則這些值不完全相同(由EqualsGetHashCode方法定義)。


注:Equals絃樂的情況和空白敏感,所以你可能需要Trim字符串並將其轉換爲一個情況或比較時,使用StringComparer.OrdinalIgnoreCase

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

如果你想做更多的工作,你甚至可以寫自己的StringComparer

+1

是的,「家庭作業」問題的問題在於他可能被告知要使用列表。不幸的是,教授並不總是保持他們的課程最新的最好的方法。 – Aaron 2012-01-07 17:55:59

1

該比較區分大小寫。這意味着「喬」和「喬」是不同的,都將被添加。這可能是你的問題嗎?

我測試了你的代碼。它似乎工作。但是你也在談論一個列表框。你在那裏做錯了什麼?


如果聲明您的列表作爲System.ComponentModel.BindingList(Of String)而不是List(Of String),然後分配這個名單列表框這樣的:

ListBox1.DataSource = fNames 

然後當你將它們添加新的名稱將自動顯示在列表框中去fames。

+0

我已經使用了標記和標記兩次 – user445714 2012-01-07 17:39:29