2016-08-16 5 views
0
Class MainWindow 

    Dim states As Collection = New Collection() 

    Sub Output(Value As String) 

     txtOutput.Text += Value + vbCrLf 

    End Sub 

    Sub ClearOutput(sender As Object, e As RoutedEventArgs) Handles btnClear.Click 
     txtOutput.Text = "" 
     txtInput.Text = "" 
    End Sub 

    Sub btnAdd_Click(sender As Object, e As RoutedEventArgs) Handles btnAdd.Click 

     Dim input As String = txtInput.Text 
     'Dim state As String = input.Substring(0, input.IndexOf(",")).ToString 
     'Dim stateID As String = input.Substring(input.IndexOf(" ")).ToString 

     states.Add(input) 
     Output("You added: " + input) 

    End Sub 

    Sub btnGet_Click(sender As Object, e As RoutedEventArgs) Handles btnGet.Click 

     Dim stateID As String = txtInput.Text.ToString 
     If states.Contains(stateID) Then 
      Output("You requested: " + states.Item(stateID)) 
     Else 
      Output("Not found") 
     End If 
    End Sub 

    Sub btnRemove_Click(sender As Object, e As RoutedEventArgs) Handles btnRemove.Click 

     Dim stateID As String = txtInput.Text.ToString 
     If states.Contains(stateID) Then 
      states.Remove(stateID) 
      txtOutput.Text = "" 
      Output(stateID + " removed; here's what's left:") 
      OutputStates() 
     Else 
      Output("Not found") 
     End If 

    End Sub 

    Sub btnShow_Click(sender As Object, e As RoutedEventArgs) Handles btnShow.Click 
     OutputStates() 
    End Sub 

    Sub OutputStates() 
     For Each state As String In states 
      Output(state) 
     Next 
    End Sub 
End Class 

Ich bin fertig mit der Schaltfläche Hinzufügen und Anzeigen. der Eingang ist: California, CAVB.net Sammlung

Aber mein Problem ist die Schaltfläche entfernen und erhalten. Zum Beispiel habe ich "CA" als StateID eingegeben, wenn ich auf die Schaltfläche "Get" oder "Remove" klicke, wird geprüft, ob die Statussammlung ein Element mit der Zeichenfolge "CA" enthält, aber die Antwort wird immer nicht gefunden. 1) .Contains (stateID) das ist Kalifornien, CA

+3

Es gibt viele bessere Sammlungstypen in VB.NET. Bitte verwerfen Sie diese Reste des VB6-Erbes (wenn Sie können) – Steve

+0

das war der Code, der von unserem Prof gegeben wurde, und wir müssen nur Eingänge anstelle von fest codierten Eingaben hinzufügen. – rkz

+0

Ihr Prof möchte sicher, dass Sie die For Each-Anweisung ausüben. Um eine Übereinstimmung mit "CA" zu finden, ist es erforderlich, die Sammlung zu Iterieren und jedes Element zu überprüfen. –

Antwort

1

In .NET würden Sie eine HashSet(Of T) verwenden.

Dim states As HashSet(Of String) = New HashSet(Of String)() 

states.Add(stateID) 

If states.Contains(stateID) Then ... 

Beachten Sie, dass die HashSet Groß- und Kleinschreibung ist standardmäßig. Wenn Sie es sein Groß- und Kleinschreibung wollen, initialisieren Sie es wie folgt aus:

Dim states As HashSet(Of String) = New HashSet(Of String)(StringComparer.OrdinalIgnoreCase) 

Beachten Sie auch, dass (mit Collection) states(1) ein stateID zurückgibt. Daher könnte man vergleichen

states(1) = stateID 'Should return True if 1st state is "CA" and stateID is "CA" 

states(1).Contains(stateID) macht keinen Sinn. Wahrscheinlich hier Contains bezieht sich auf die Zeichen in state(1) enthalten.

Verwandte Themen