Я случайно связал две наблюдаемые коллекции? - PullRequest
0 голосов
/ 02 ноября 2011

В моем коде у меня есть две следующие коллекции:

    private ObservableCollection<Job> listOfJobs1 = new ObservableCollection<Job>();
    private ObservableCollection<Job> listOfJobs2 = new ObservableCollection<Job>();

Вчера я попытался заполнить listOfJobs2 объектами из listOfJobs1, я сделал это так ...

listOfJobs2 = listOfJobs1;

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

Является ли это '=' эквивалентом каким-либо образом связывать коллекции такчто они наблюдают друг за другом?

Единственная причина, по которой я спрашиваю, состоит в том, что эта проблема была решена с помощью foreach в listOfJobs1 и программным добавлением в listOfJobs2 с помощью Add ().Если я прав и два способа наполнения коллекции различны, может кто-нибудь направить меня в правильном направлении к статье, объясняющей, как это работает, потому что я сейчас собираюсь написать метод, который будет сильно зависеть от того,это тот случай.Кроме того, было бы так, если бы я использовал List <>?

1 Ответ

5 голосов
/ 02 ноября 2011

listOfJobs1 и listOfJobs2 являются ссылками на объект (т. Е. Они указывают, где хранится объект).Когда вы пишете:

listOfJobs2 = listOfJobs1;

, вы говорите, что ссылка, хранящаяся в listOfJobs2, равна ссылке, хранящейся в listOfJobs1.Другими словами, обе ссылки будут указывать на объект, на который изначально ссылается listOfObjects1.В этот момент вы можете заменить все listOfJobs2 на listOfJobs1, и приложение будет вести себя одинаково.

Наблюдаемые коллекции содержат список ссылок на вещи, которые они содержат, добавляя все ссылки из первого списка во второй список, используя Add () в цикле, который вы говорите «эй, список - держитезапись этих вещей для меня ", в то время как назначение списка 1 списку 2, как вы делали, говорит" эй, ссылка на список 2 теперь содержит список 1 ", так что у вас есть только список объектов, сохраненных списком один вэтот момент.Вы полностью потеряли любую ссылку на объект, который был вторым объектом списка, и у вас больше нет к нему доступа.

...