Two List (Of String), когда я добавляю значение к одному, оно добавляется к другому - PullRequest
0 голосов
/ 05 апреля 2020

Я получаю папки в двух разных каталогах и помещаю их имена в два списка, но если одно имя папки существует только в одном каталоге, я бы не хотел ничего вводить в другой список и наоборот, если только имя папки не является в обоих я просто хочу имя в обоих списках.

Вот код, который я использую:

Private folders As New List(Of String), oFolders As New List(Of String), AllFoldrs As New List(Of DirectoryInfo), CurFdr As DirectoryInfo
Private Sub Get_LVItems()
    folders.Clear() : oFolders.Clear() : CurLV.Items.Clear() : AllFoldrs.Clear() 'Empty folders List and CurrentLV items
    Dim LV As ListView = CurLV, oLV As ListView = OtherLv
    Dim Pth As String = CurTV.SelectedNode.Name, oPth As String = ""
    Dim Dinfo As New DirectoryInfo(Pth), oDinfo As DirectoryInfo = Nothing
    Dim TmpFoldrs As New List(Of DirectoryInfo), oTmpFoldrs As New List(Of DirectoryInfo)
    If Not IsNothing(OtherTV.SelectedNode) Then
    End If
    If TVs_Syncd Then
        oPth = OtherTV.SelectedNode.Name : oDinfo = New DirectoryInfo(oPth)
        TmpFoldrs.AddRange(Dinfo.GetDirectories) : oTmpFoldrs.AddRange(oDinfo.GetDirectories)
        AllFoldrs.AddRange(Dinfo.GetDirectories) : AllFoldrs.AddRange(oDinfo.GetDirectories)
        AllFoldrs.Sort(AddressOf SrtAllFdrs)
        Do While AllFoldrs.Count > 0
            CurFdr = AllFoldrs(0)
            Dim Found_fdr As DirectoryInfo = Nothing, oFound_fdr As DirectoryInfo = Nothing
            For Each fdr As DirectoryInfo In TmpFoldrs
                If fdr.Name = CurFdr.Name Then Found_fdr = fdr : Exit For
            Next
            If IsNothing(Found_fdr) Then folders.Add(Nothing) Else folders.Add(Found_fdr.FullName)
            For Each ofdr As DirectoryInfo In oTmpFoldrs
                If ofdr.Name = CurFdr.Name Then oFound_fdr = ofdr : Exit For
            Next
            If IsNothing(oFound_fdr) Then oFolders.Add(Nothing) Else oFolders.Add(oFound_fdr.FullName)
            AllFoldrs.RemoveAll(AddressOf RemDirs)'After adding a folder to both collections (folders & oFolders) all instances of that folder get removed from AllFolders
        Loop
        LoadListView(oLV)
        folders.Clear()
        folders = oFolders
        LoadListView(LV)
    Else
        folders.AddRange(Directory.GetDirectories(Pth))
        LoadListView(LV)
    End If
End Sub

две функции: для удаления всех экземпляров только что обработанного имени папки и функция сортировки для сортировки AllFoldrs после добавления в нее всех имен папок:

Public Function RemDirs(dir As DirectoryInfo) As Boolean
    Return dir.Name = CurFdr.Name
End Function
Public Function SrtAllFdrs(ByVal X As DirectoryInfo, ByVal Y As DirectoryInfo) As Integer
    Return X.Name.CompareTo(Y.Name)
End Function

Я добавляю обе папки каталогов в AllFolders и каждую папку каталогов в свой собственный список Tmp. В первом Для каждого l oop я вижу, существует ли текущее имя папки в списке tmp, если оно помещает значение в Found_fdr, то когда я добавляю его в список (Of String), который я использую для заполнения списка A , он добавляется в другой список (Of String) одновременно. Я сбиваю с толку меня! Это гораздо более важно, чем мой последний вопрос, на который нет ответов, что меня не удивило. Кто-нибудь? Пожалуйста ...

...