.net visual basic数组搜索
我试图从一个用户输入的文本框中搜索一个数组,以查找与新输入的条目相匹配的以前的条目。在VisualBasic中有什么方法可以做到这一点吗?我正在从C#转换代码,Visual Basic不断给我一个错误“对象引用未设置为对象的实例”。使用此语句,代码跳过if块以检查匹配文本,因为在本例中,arrayName(I)或0当前为空。如果我取出这个If块,并且它达到了名称检查,那么它会导致一个错误,因为arrayName(i)中没有任何内容可以转换为上面的字符串 这是我的代码。我的问题是,是否有一种更简单的方法可以从数组中搜索以前的条目到新输入的条目 编辑:详细信息 这是数组声明.net visual basic数组搜索,.net,arrays,.net,Arrays,我试图从一个用户输入的文本框中搜索一个数组,以查找与新输入的条目相匹配的以前的条目。在VisualBasic中有什么方法可以做到这一点吗?我正在从C#转换代码,Visual Basic不断给我一个错误“对象引用未设置为对象的实例”。使用此语句,代码跳过if块以检查匹配文本,因为在本例中,arrayName(I)或0当前为空。如果我取出这个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
您的代码段尚未定义
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作为字符串(3)
在VB中与Dim myArray()=新字符串(3){}
不同。第一个示例生成一维数组。最后一个示例生成一个二维数组。因为您不想使用内置的搜索功能…请尝试此
在全局范围下声明它…所以把它放在form类下
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
Private子按钮1\u单击(发送方作为System.Object,e作为System.EventArgs)处理按钮1。单击
如果计数器<10,则
Dim input As String=InputBox(“请输入名称”)
如果输入=“则
MsgBox(“未输入任何内容!”)
出口接头
如果结束
对于x=0到10
如果UCase(输入)=UCase(arrayname(x)),则
MsgBox(“重复名称!”)
出口接头
如果结束
下一个x
arrayname(计数器)=输入
计数器+=1
其他的
MsgBox(“数组已满!”)
如果结束
端接头
就这样。编辑以满足您的确切需要。告诉我它是否有效:)您可能有与此线程相同的问题:)请检查它。具体是哪一行导致了异常?异常为您提供了该信息。当您单步执行代码时,调试器会告诉您什么?
arrayName
的声明是什么?@Tim oh wait:)您的问题是关于弹出的错误还是“从数组到新输入项搜索以前的项更简单的方法”?还是两者都有?@chris_technology这两者都是因为这种方法不起作用,我想知道是否有一种好的方法可以用于此function@Tim然后这个线程可能会回答您的两个问题:)它使用内置的方法搜索数组,因此如果使用正确,并且代码很短,您应该不会有任何错误,这回答了你的“快速方法”问题:)x只是我的arrayNo的固定长度,它根本没有定义。您可以显式地显示i
的定义和实例化。如果定义了x
,为什么不将其包含在代码示例中?因为还有很多代码与问题无关。它只是一个固定长度的数组,但没有使用任何数据初始化。我尝试了底层代码,出于某种原因,当我逐步通过调试器时,它到达if not语句,即使我两次输入相同的字符串,它也不会进入if块,它只是跳过它,然后转到下一个从arrayName声明中移除花括号,您的问题应该会自行解决。它有问题!我可以多次输入同一个字符串,但由于某种原因,它无法将它们作为匹配项。我一步一步地浏览代码,它执行compare语句,但每次都转到Else来添加到数组。它还在做:/I我添加了一些变量,以查看代码在执行过程中正在做什么,当数组到达代码末尾时,它似乎没有存储变量,知道为什么吗?@chris_techno25,您应该在for循环中包含字符串数组的上限10。VB与C#的不同之处在于,当对数组进行尺寸标注时,数组是以零为基的,并且包含了下标的数目。在本例中,字符串数组中有11个元素。@AdamZuckerman谢谢您,先生。是的,我在想它和C#:的数组规则是一样的。)