Вот мой код:
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 является просто некоторой полностью разъединенной копией объекта в "списке"?
FirstOrDefault
выбирает элемент в коллекции, но не «отсоединяет» или «клонирует» его. Т.е. это тот же самый случай. Поэтому при изменении свойства изменяется исходный экземпляр.
Если вы хотите «отдетать» объект, вам придется скопировать его тем или иным способом.
не изменяется и по-прежнему включает объект, возвращенный FirstOrDefault.
Это общее правило для всех операторов LINQ: они никогда не изменяют исходную коллекцию.
Также обратите внимание, что thisEvent не является «копией» (если Event не является типом значения (структурой), а не классом) - это ссылка на тот же объект, на который имеется ссылка в списке.
Если Event
является ссылочным типом, то да, изменение thisEvent
изменит элемент в списке.