2011-11-10 2 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을 list (즉, foreach 루프에서 현재 참조되는 작업 객체에 영향을줍니다). 나는 그것이 왜 직업에 영향을 미칠지 생각할 수 없다. 쉬프트 업 목록!

답변

0

에서 참조 job에 추가합니다.

그래서 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 또한 내가 두 개체가 동일한 참조를 생각 list2

관련 문제