我正在尝试在数组中搜索用户输入的文本框中与新传入条目匹配的先前条目。有没有办法在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
答案 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) {}
不同。第一个例子产生一维数组。最后一个例子产生了一个二维数组。