Почему list.add () также добавляет элементы в объект И в исходный объект? - PullRequest
2 голосов
/ 16 июня 2011

Надеюсь, это достаточно просто.Мне нужно иметь возможность добавлять элементы в копию mylist.testlist без изменения глобального объекта mylist.(Похоже, это происходит с помощью приведенного ниже кода.)

Когда я работаю над x, который должен быть совершенно отдельным объектом, mylist также модифицируется.Как я могу это исправить?Я много работал со списками и никогда не видел такого поведения раньше.Я протестировал и воспроизвел проблему в .NET 3.5 и .NET 4.0 на Win 7 Pro 32bit.

TIA!

Исходный код:

Public Class Form1
    Public mylist As New test

    Sub Main()
        Dim x As test = mylist
        For i As Integer = 0 To 10
            x.testlist.Add(False)
        Next

        MsgBox("x count: " + x.testlist.Count.ToString + vbCrLf + "mylist count: " + mylist.testlist.Count.ToString)

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Main()
    End Sub
End Class
Public Class test
    Public testlist As New List(Of Boolean)
    Public Sub New()
        testlist.Add(False)
    End Sub

End Class

1 Ответ

4 голосов
/ 16 июня 2011

Как отметил Тим Шмельтер в своем комментарии, ваша проблема - это строка:

Dim x As test = mylist

, с помощью которого x получает ссылку на mylist. Это означает, что оба (x и mylist) указывают на один и тот же экземпляр test. Вот почему изменение одного из них также меняет другое.

Чтобы исправить это, вы можете определить x как новый экземпляр test и скопировать все элементы из mylist.testlist в x.testlist.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...