使用嵌套的for循环比较项目

时间:2018-11-02 15:40:17

标签: vb.net

我有一个来自类对象的Desktopname列表。下面是每个节点都有desktopid,desktopname等的类对象。

<XmlType([Namespace]:="http://vanguard.com/csif/CSIFConfiguration.xsd")>
Public Class DesktopGroupRoleMappingType
    <XmlAttribute>
    Public businessfunction As String
    <XmlAttribute>
    Public desktopid As Integer
    <XmlIgnore>
    Public desktopidSpecified As Boolean
    <XmlAttribute>
    Public desktopname As String

到目前为止,我们正在使用以下代码将桌面名称添加到列表中。

For Each desktopMapping As DesktopGroupRoleMappingType In desktopGroupRoleMappings
    If lstDesktops.Items.IndexOf(desktopMapping.desktopname.Trim) < 0 Then
        lstDesktops.Items.Add(desktopMapping.desktopname.Trim)  '& " (" & desktopMapping.businessfunction.Trim & ")")
    End If
Next

现在,我需要基于desktopID从列表中删除两个桌面名称,因此我添加了如下配置条目。现在我的问题是,如何从列表中删除桌面名称。

<add  key ="Test" value="152,155"/>

1 个答案:

答案 0 :(得分:0)

由于列表仅包含名称,因此一旦添加,您将无法通过ID查找并将其删除。有解决方法。例如,如果您覆盖ToString上的DesktopGroupRoleMappingType方法,以使其返回名称,如下所示:

<XmlType([Namespace]:="http://vanguard.com/csif/CSIFConfiguration.xsd")>
Public Class DesktopGroupRoleMappingType
    <XmlAttribute>
    Public businessfunction As String
    <XmlAttribute>
    Public desktopid As Integer
    <XmlIgnore>
    Public desktopidSpecified As Boolean
    <XmlAttribute>
    Public desktopname As String
    Public Function ToString() As String
        Return desktopname
    End Function
End Class

然后您可以将整个对象添加到列表中,而不仅仅是名称:

lstDesktops.Items.Add(desktopMapping) 

一旦列表中有整个对象,您就可以搜索整个对象以找到要删除的对象。

但是,如果您甚至不需要在事后删除它们,而只需跳过首先添加它们就足够了,那么这会更加容易。只需过滤掉不需要的部分,然后添加它们即可:

If Not unwantedIds.Contains(desktopMapping.desktopid) Then
    lstDesktops.Items.Add(desktopMapping.desktopname.Trim)
End If