可视化基本数组搜索

时间:2014-01-27 03:45:54

标签: .net arrays

我正在尝试在数组中搜索用户输入的文本框中与新传入条目匹配的先前条目。有没有办法在Visual Basic中执行此操作?我正在从C#转换我的代码,Visual Basic不断给我一个错误“对象引用未设置为对象的实例”。使用此语句,代码跳过if块以检查匹配的文本,因为在这种情况下arrayName(i)或0当前是NOTHING。如果我取出这个if块并且它到达名称检查,那么它会导致错误,因为arrayName(i)中没有任何内容可以转换为上面的字符串。

所以这是我的代码..我的问题是,有一种更简单的方法可以将数组中的先前条目搜索到新输入的条目。

编辑:详情

这是数组声明Dim arrayName() = New String(2) {},当它到达If arrayName(i).ToString.ToUpper = txtInput.Text.ToUpper然后它说“对象变量或没有设置块变量”。 “NullReferenceException未被用户代码处理”。代码中的“x”是数组的固定长度,在这种情况下为2。

Dim i As Integer = 0
            While x >= i
                If arrayName(i) IsNot Nothing Then
                    If arrayName(i).ToString.ToUpper = txtInput.Text.ToUpper Then
                        match = False
                        lblName.Text = "Enter a unique name"
                    End If
                End If
                    i += 1
            End While

2 个答案:

答案 0 :(得分:1)

由于您不想使用内置搜索功能...请尝试此...

在Global Scope下声明这个...所以把它放在表单类下面......

Dim counter As Integer = 0
Dim arrayname(10) As String

添加按钮控件...并添加此代码...

 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    If counter < 10 Then
        Dim input As String = InputBox("Please input name.")
        If input = "" Then
            MsgBox("Nothing entered!")
            Exit Sub
        End If
        For x = 0 To 10
            If UCase(input) = UCase(arrayname(x)) Then
                MsgBox("Duplicate name!")
                Exit Sub
            End If
        Next x
        arrayname(counter) = input
        counter += 1
    Else
        MsgBox("Array full!")
    End If
End Sub

就是这样。编辑以满足您的确切需求。告诉我它是否有效:)

答案 1 :(得分:0)

您的代码段尚未定义x

您可以使用一点LINQ高效搜索数组:

Dim listFound As IEnumarable(String) = From item In arrayName _
                                       Where item.ToString.ToUpper _
                                       = txtInput.Text.ToUpper _
                                       Select item
If listFound.Count > 0 Then
    lblName.Text = "Enter a unique name"
End If

或者您可以手动搜索数组,但我认为这比您使用的方法更有效:

Dim Match As Boolean = False

For i As Integer = 0 To arrayName.Count - 1
    If Not IsNothing(arrayName(i)) Then
        If arrayName(i).ToString.ToUpper = txtInput.Text.ToUpper Then
            Match = True
            Exit For
        End If
    End If
Next
If Match Then
    lblName.Text = "Enter a unique name"
End If

最后两项注意事项:arrayName(i).ToString.ToUpper相当于UCase(arrayName(i))。您可能希望执行一些速度测试以查看哪个更快。

此外,Dim myArray As String(3)在VB中与Dim myArray() = New String(3) {}不同。第一个例子产生一维数组。最后一个例子产生了一个二维数组。