关于这段数据和(伪)代码:
以下代码遍历列表,并将多个列表元素作为它们在 REST 期间出现的多个列表中拉出来,将这些列表添加到“列表的列表”中。在休息期间可能会有一个或多个列表条目。
在for循环底部,DutyDayPeriods<>包含1-n个相同的“thisList”副本。基本上是在最后一个休息时间和列表结束之间的最后一组列表项:
因此,我期望如下:
但实际上我得到的结果是:
List<myClass> Periods = new List<myClass>();
// contents of Periods is:
Periods[0] = "000";
Periods[1] = "111";
Periods[2] = "222";
Periods[3] = "REST"; // REST PERIOD
Periods[4] = "444";
Periods[5] = "REST"; // REST PERIOD
Periods[6] = "666";
Periods[7] = "777";
Periods[8] = "888";
以下代码遍历列表,并将多个列表元素作为它们在 REST 期间出现的多个列表中拉出来,将这些列表添加到“列表的列表”中。在休息期间可能会有一个或多个列表条目。
List<List<Period>> DutyDayPeriods = new List<List<Period>>();
List<Period> thisList = new List<Period>();
for (int i = 0; i < Periods.Count; i++ ) {
thisList.Add(Periods[i]);
if (Periods[i].Rest == "REST") {
DutyDayPeriods.Add(thisList);
thisList.Clear();
}
}
在for循环底部,DutyDayPeriods<>包含1-n个相同的“thisList”副本。基本上是在最后一个休息时间和列表结束之间的最后一组列表项:
因此,我期望如下:
DutyDayPeriods[0]
Period 000
Period 111
Period 222
DutyDayPeriods[1]
Period 444
DutyDayPeriods[2]
Period 666
Period 777
Period 888
但实际上我得到的结果是:
DutyDayPeriods[0]
Period 666
Period 777
Period 888
DutyDayPeriods[1]
Period 666
Period 777
Period 888
DutyDayPeriods[2]
Period 666
Period 777
Period 888
thisList
的行为像是一个引用(reference)而不是一个值(value)。
每当thisList
发生变化时,它似乎会对已经添加到DutyDayPeriods
中的项目进行追溯更改。
这是真的吗?如果是这样,我该如何实现我想做的事情呢?
谢谢。
编辑:
我修改了以下内容,以防止休息时间自身被包括在内。 以防万一你们中有人注意到了这一点。 ;-)
if (Periods[i].Rest != "REST") {
thisList.Add(Periods[i]);
}
else {
DutyDayFlights.Add(thisList);
thisList = new List<Period>();
}