[英]visual basic array searching
我正在尝试从用户输入的文本框中搜索与新传入条目匹配的先前条目的数组。 在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
由于您不想使用内置的搜索功能...请尝试...
将此声明在“全局范围”下...因此放在表单类下...
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
而已。 编辑以适合您的确切需求。 告诉我是否可行:)
您的代码段尚未定义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))
。 您可能需要执行一些速度测试,以查看哪个实际上更快。
另外,在VB中,将Dim myArray As String(3)
与Dim myArray() = New String(3) {}
。 第一个示例生成一维数组。 最后一个示例生成一个二维数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.