Объект все еще подключен к списку после FirstOrDefault?

Вот мой код:

        Event thisEvent = (from i in list
                           where (i.eventID == eventID)
                           select i).FirstOrDefault();
        if (thisEvent != null)
        {
            thisEvent.eventResolved = resolved;
            thisEvent.eventSequence.Add(item);
        }

"список" является набором IEnumerable, т.е.

IEnumerable<Event> list;

То, что я задаюсь вопросом: после создания thisEvent использование FirstOrDefault, thisEvent все еще подключен к списку? Другими словами, когда я изменяю эти два свойства, eventResolved и eventSequence, "список" на самом деле изменяется, или thisEvent является просто некоторой полностью разъединенной копией объекта в "списке"?

12
задан Cynthia 12 March 2010 в 22:46
поделиться

3 ответа

FirstOrDefault выбирает элемент в коллекции, но не «отсоединяет» или «клонирует» его. Т.е. это тот же самый случай. Поэтому при изменении свойства изменяется исходный экземпляр.

Если вы хотите «отдетать» объект, вам придется скопировать его тем или иным способом.

14
ответ дан 2 December 2019 в 20:16
поделиться
Список

не изменяется и по-прежнему включает объект, возвращенный FirstOrDefault.

Это общее правило для всех операторов LINQ: они никогда не изменяют исходную коллекцию.

Также обратите внимание, что thisEvent не является «копией» (если Event не является типом значения (структурой), а не классом) - это ссылка на тот же объект, на который имеется ссылка в списке.

2
ответ дан 2 December 2019 в 20:16
поделиться

Если Event является ссылочным типом, то да, изменение thisEvent изменит элемент в списке.

0
ответ дан 2 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: