Изменения в одном словаре, влияющие на другой словарь - PullRequest
0 голосов
/ 31 мая 2019

Первоначально я «dict» и «dict2», который является копией «dict». Если я заменю ключ на «dict», изменение будет применено и к dict2 Как этого можно избежать? Ниже приведен пример кода.

Sub Main()
    Dim dict As New Dictionary(Of String, Object) From {{"Big", "Small"}, {"Hot", "Cold"}}
    Dim dict2 As New Dictionary(Of String, Object) : dict2 = dict

    If dict.ContainsKey("Hot") Then 'Only makes changes to dict
        dict.Add("Warm", dict("Hot").ToString)
        dict.Remove("Hot")
    End If

    writeDict(dict) 'Displays said changes
    writeDict(dict2) 'Displays same changes as dict
End Sub

Sub writeDict(dict As Dictionary(Of String, Object)) 'Ignore this
    For Each i As KeyValuePair(Of String, Object) In dict
        Console.Write(i.ToString)
    Next
    Console.ReadLine()
End Sub

В идеале я должен передать 'dict' другому Sub, проверить его, заменив некоторые ключи, а затем выйти из Sub. Затем я возобновил бы работу с оригинальным словарем.

Но в настоящее время это не работает, потому что изменения в словарях кажутся глобальными.

1 Ответ

4 голосов
/ 31 мая 2019

Когда вы делаете «dict2 = dict», он не создает новый словарь, у вас просто есть две переменные, которые указывают на одно и то же место. Вам нужно создать новый экземпляр и скопировать данные.

    Dim dict As New Dictionary(Of String, Object) From {{"Big", "Small"}, {"Hot", "Cold"}}
    Dim dict2 As New Dictionary(Of String, Object)(dict)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...