2014-01-27 71 views
0

我正在嘗試從用戶輸入的文本框中匹配新傳入條目的以前條目搜索數組。有沒有什麼辦法在Visual Basic中做到這一點?我從C#轉換我的代碼,Visual Basic不斷給我一個錯誤「對象引用未設置爲對象的實例。」有了這個語句,代碼會跳過if語句來檢查匹配的文本,因爲在這種情況下,arrayName(i)或0目前是NOTHING。如果我取出這個如果塊,它到達名稱檢查,然後它會導致一個錯誤,因爲沒有什麼在arrayName(i)轉換爲上部字符串。視覺基本數組搜索

所以這裏是我的代碼..我的問題再次是有一個更簡單的方法來搜索數組中的以前的條目新輸入的條目。

編輯:細節

這是數組聲明Dim arrayName() = New String(2) {}和當它到達如果arrayName中(ⅰ).ToString.ToUpper = txtInput.Text.ToUpper然後它說:「對象變量或With塊變量未設置。 「 「用戶代碼未處理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

你可能有這個問題相同的問題:)檢查出來。 http://stackoverflow.com/questions/697270/how-can-i-search-an-array-in-vb-net –

+0

哪條線特別引起異常?例外爲您提供了這些信息。調試器告訴你什麼時候你通過代碼?什麼是'arrayName'的聲明? –

+0

@Tim哦,等待:)你的問題是關於彈出的錯誤還是'更簡單的方法來從數組中搜索以前的條目到新輸入的條目'?或兩者? –

回答

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) {}不同。第一個例子導致1維數組。最後一個例子得到一個2維數組。

+0

x只是我的數組的固定長度 – Tim

+0

不,它根本沒有定義。你明確地顯示'我'的定義和實例化。如果定義了'x',爲什麼不把它包含在代碼示例中呢? –

+0

因爲有更多的代碼與問題無關。它只是一個固定長度的數組,但沒有使用任何數據進行初始化 – Tim

1

既然你不想使用內置的搜索功能......請嘗試......

聲明這個在全局範圍......所以把它剛下窗體類...

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 

就是這樣。編輯以滿足您的確切需求。告訴我,如果它的作品:)

+0

它有一個問題!我可以多次輸入相同的字符串,並且由於某種原因,它不會將它們作爲匹配。我遍歷代碼並執行比較語句,但每次都會將其添加到數組 – Tim

+0

@Tim My bad。哈哈,我已經編輯它了......試試吧。 –

+0

它還在做:/ – Tim