我有两个foreach循环,它们在我的应用程序中构建事件的时间轴。我有一个时间轴列表对象,它是时间轴详细信息对象的列表。代码如下所示:
var viewModel = new TimeLineListViewModel();
var timelineDetailsViewModel = new TimelineDetailsViewModel();
var referralDiaryEvents = _referralService.GetReferralDiaryEventsByReferralId((int)referralId).ToList();
var referral = _referralService.GetReferral((int)referralId);
foreach (var referralDiaryEvent in referralDiaryEvents)
{
1 timelineDetailsViewModel.EventDate = referralDiaryEvent.App_DiaryEvent.EventDateTimeScheduled;
2 timelineDetailsViewModel.EventType = referralDiaryEvent.App_DiaryEvent.Ref_EventType.Description;
3 timelineDetailsViewModel.EventDescription = referralDiaryEvent.App_DiaryEvent.EventName;
4 viewModel.TimeLineList.Add(timelineDetailsViewModel);
}
foreach (var referralStatusHistory in referral.App_ReferralStatusHistory)
{
timelineDetailsViewModel.EventDate = referralStatusHistory.DateChanged;
timelineDetailsViewModel.EventType = "Referral Status Changed: " + referralStatusHistory.Ref_ReferralStatus.Description;
timelineDetailsViewModel.EventDescription = referralStatusHistory.Ref_ReferralStatusReason.Description;
viewModel.TimeLineList.Add(timelineDetailsViewModel);
}
这一切都应该是直截了当的,并且应该在每个循环中添加每个项目以构建对象列表。问题是它不是那样做的。我实际上不知道它在做什么 - 当我调试并运行循环时,它正在做一些非常奇怪的事情。我已经在循环中对代码行进行了编号以供参考。它将通过第1行,然后回到第2行,然后回到第1行,然后回到第3行,然后回到第2行,然后到第4行,依此类推,它在环路中来回跳转显而易见的原因,而不是直接循环,一行一行。
然后最终它会将timelineDetailsViewModel添加到TimeLineList。然后它将再次为下一个项启动循环,但是当它再次将timelineDetailsViewModel添加到TimeLineList时,TimeLineList计数变为0,然后跳回到第2行,然后再返回到4,然后将项添加到列表,但覆盖以前添加到列表中的每个项目,列表中的所有timelineDetailsViewModel项目与最新添加的项目相同。所以当它到达第二个foreach循环的底部时,在我的代码中,列表中应该有七个唯一的timelineDetailsViewModel项目,所有项目都有不同的细节 - 最终会有七个项目,但它们都与在第二个foreach循环的最后一个循环期间添加的最后一个timelineDetailsViewModel。
有人知道这里发生了什么吗?我的视觉工作室坏了吗?我试过在我的机器上重启,但无济于事。我正在使用visual studio 2012。
答案 0 :(得分:4)
它没有解释奇怪的调试器行为,但实际上您的代码中还有另一个错误:
您只创建了一次TimeLineListViewModel
和TimelineDetailsViewModel
的实例。然后,遍历foreach
循环,您始终会更改完全相同实例的属性 。
在每次循环中,您正在更改您创建的唯一实例的属性,并尝试将此实例x次添加到您的列表中。
您需要在<{1}}循环内
中创建实例 s :foreach