【问题标题】:VB.net collectionVB.net 合集
【发布时间】:2016-08-16 15:03:34
【问题描述】:
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

我已经完成了添加和显示按钮。 输入是:加利福尼亚州,加利福尼亚州

但我的问题是删除和获取按钮。 例如,我输入“CA”作为 stateID,如果我单击获取或删除按钮,它将检查 states 集合中是否有带有“CA”字符串的项目,但即使我使用 states(1 ).Contains(stateID) 这是加利福尼亚州,CA

【问题讨论】:

  • VB.NET 中有很多更好的集合类型。请丢弃这些遗留的 VB6 遗产(如果可以的话)
  • 这是我们教授给的代码,我们只需要添加输入而不是硬编码输入。
  • 您的教授肯定希望您练习 For Each 语句。需要迭代集合并检查每个元素以找到与“CA”的匹配项。
  • VB.NET 不是 VB7。它是一种全新的语言,具有全新的库。你的教授应该修改他的旧作业。

标签: arrays vb.net list collections


【解决方案1】:

在 .NET 中,您将使用 HashSet(Of T)

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

states.Add(stateID)

If states.Contains(stateID) Then ...

请注意,HashSet 默认区分大小写。如果您希望它不区分大小写,请像这样初始化它:

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

还要注意,(使用Collectionstates(1) 返回一个stateID。因此,您可以比较

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

states(1).Contains(stateID) 毫无意义。大概这里Contains指的是state(1)中包含的字符。

【讨论】:

    猜你喜欢
    • 2018-09-22
    • 2010-09-16
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多