结构检查的循环是否已经存在

时间:2016-08-25 02:28:02

标签: xml vb.net loops

我的程序包含:

  • " textBox1的"作为ID
  • " ADD"每次单击它时按钮都会保存结构中的所有数据

  • " SAVE"按钮将结构中的所有项目保存到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

1 个答案:

答案 0 :(得分:0)

你应该改变一些事情。

不使用ioDevice数组,而是使用List(Of ...)。这样更容易管理,它避免了ReDim Preserve,这是非常低效的。

其次,为获取所需参数的设备类型定义构造函数可能是合理的。这样,您可以确保在使用它时设置了所有必填字段。您的设备类型似乎是一种结构。除非你有具体的理由,否则我建议把它变成一个班级。

存在的检查应与实际操作分开。实际上,如果您需要按ID访问设备,则Dictionary(Of ..., ...)之类的其他数据结构会更合适。但就目前而言,让我们坚持下去。

重命名控件以符合其目的Button2,而TextBox1根本不具有表现力。

所以最后,你的代码看起来像这样:

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循环。