簡體   English   中英

視覺基本陣列搜尋

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM