一个列表的更改如何影响一个完全不同的列表

本文关键字:一个 列表 影响 何影响 | 更新日期: 2023-09-27 18:13:57

我有以下代码:

jobsToShiftUp.AddRange(PresentationManager.Instance.ScheduleViewSource.Where(o => o.Resources.First().ResourceName == criticalJob.Resources.First().ResourceName && ((o.Start >= criticalJob.Start) || (o.Start < criticalJob.Start && o.End > criticalJob.Start)) && !o.JobGuid.Equals(((Job)state.DraggedAppointments.First()).JobGuid) && GetWeekNumber(o.Start) == GetWeekNumber(criticalJob.Start)));
jobsToShiftUp = jobsToShiftUp.OrderBy(o => o.Start).ToList();
TimeSpan timeToShift = criticalJob.End - jobsToShiftUp.First().Start;
foreach (Job job in jobsToShiftUp)
{
    if (jobsToShiftUp.IndexOf(job) == 0)
    {
        ((ObservableCollection<Job>)state.DestinationAppointmentsSource).Single(o => o.JobGuid.Equals(job.JobGuid)).Start += timeToShift;
        ((ObservableCollection<Job>)state.DestinationAppointmentsSource).Single(o => o.JobGuid.Equals(job.JobGuid)).End += timeToShift;

最后两行(增加作业的开始和结束属性(会影响state.destinationappointmentssource列表和jobToShiftUp列表(即,它会影响foreach循环中当前引用的作业对象(。我想不出为什么它会影响jobsToShiftUp列表!?

一个列表的更改如何影响一个完全不同的列表

因为两个列表都包含相同的对象实例。类似:

Job job = new Job();
List<Job> list1 = new List<Job>{job};
List<Job> list2 = new List<Job>{job};

list[0].Start+=10将在job上加10,list2 也引用了该值

我认为两个对象都有相同的引用。

因此,jobsToShiftUp集合和state.DestinationAppointmentsSource可能都有一些相同的引用,并更新反映在另一个中的引用。

您可以使用克隆(深度复制(来避免这种情况。