2016-08-25 83 views
0

我的程序包含:做結構檢查循環已經存在或不

  • 「textBox1的」爲ID
  • 「添加」按鈕來保存結構每次所有的數據我點擊它

  • 「保存」按鈕,所有項目的結構轉換成XML文件

要保存所有的數據保存單擊添加後,但噸已經成功。

事情是我想比較,如果數據/元素鍵已經存在或沒有。

如果數據/元素已經存在,那麼msgbox("ID ALREADY EXIST")
如果不繼續添加

所以,我開始使用此代碼的編碼,問題是,它只是比較的第一要素,但不是別人。請幫忙。

Public Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
    Dim index As Integer = Nothing 
    If ioDevice IsNot Nothing Then 
     index = ioDevice.Length 
    Else 
     index = 0 
    End If 
    ReDim Preserve ioDevice(index) 

    Dim i As Integer = 0 
    With ioDevice(index) 
     Do 
      If ioDevice IsNot Nothing AndAlso ioDevice(i).DeviceID = TextBox1.Text = False Then 
       MsgBox("PROCEED") 
       .DeviceID = device.DeviceID 
       .ConfigFile = device.ConfigFile 
       .Dll = device.Dll 
      Else 
       MsgBox("ALREADY EXIST") 
       device.DeviceID = vbEmpty 
      End If 
      i = i + 1 
     Loop Until i < ioDevice.Length + 1 
    End With 
End Sub 
+0

您的一些問題有答案,但您沒有發表任何反饋意見(包括評論或接受答案。如果答案不起作用或者您對答案有任何疑問,請向答覆作者提供反饋。此外,如果答案解決了您的問題,請點擊答案旁邊的複選標記以接受答案。請看[接受答案:它是如何工作的?](http://meta.stackexchange.com/a/5235/308647 )。 –

回答

0

有幾件事情你應該改變。

而不是使用陣列ioDevice,請使用List(Of ...)。這樣更容易管理,它避免了效率非常低的ReDim Preserve。其次,爲設備類型定義一個具有所需參數的構造函數可能是合理的。這樣,您可以確保所有必填字段在您使用時均已設置。看起來你的設備類型是一個結構。除非你有具體的理由,否則我會建議把它變成一個班級。

存在檢查應與實際操作分開。事實上,如果您需要通過ID訪問設備,像Dictionary(Of ..., ...)這樣的不同數據結構會更合適。但現在,讓我們堅持列表。

並重命名您的控件以匹配其目的Button2TextBox1根本不具有表現力。

所以在最後,你的代碼應該是這樣的:

Public Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
    Dim newDeviceId = TextBox1.Text 
    'Check if it already exists 
    Dim exists = False 
    For Each device in ioDevice 'Remember that ioDevice is now a list 
     If device.DeviceID = newDeviceId Then 
      exists = True 
      Exit For 
     End If 
    Next 

    If exists Then 
     MsgBox("ALREADY EXIST") 
    Else 
     MsgBox("PROCEED") 
     ioDevice.Add(New Device(newDeviceId, ...)) 'Any other parameter you defined in the constructor 
    End If 
End Sub 

實際上,存在檢查可以更巧妙地用lambda表達式來完成:

Dim exists = ioDevice.Any(Function (device) device.DeviceID = newDeviceId) 

這將檢查整個列表如果有任何設備具有新的ID。你可以刪除後續的For Each循環。