2011-11-10 24 views
1

我有以下代碼:如何改變一個列表影響完全不同的列表?

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列表和jobsToShiftUp列表(即它影響當前在foreach循環中引用的作業對象)。我想不出爲什麼它會影響jobsToShiftUp列表!

回答

0

我認爲這兩個對象具有相同的參考引用。

所以jobsToShiftUp集合和state.DestinationAppointmentsSource可能都有一些相同的參考和更新反映在另一個。

您可以使用克隆(深層複製)來避免這種情況。

3

由於這兩個列表都包含相同的對象實例。 像:

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

list[0].Start+=10將增加10至job這也是由list2

相關問題