我正在尝试创建一个列表并将值插入其中。但是,当我添加新项目时,会将列表中的所有现有项目更改为我添加的相同值,我不明白为什么。
这是我的代码:
public List<Times> CreateListOfTimes()
{
var listOfTimes = new List<Times>();
var times = new Times();
int startTime = 8;
int endTime = startTime + 1;
for (int i = 0; i < 8; i++)
{
times.StartTime = startTime;
times.EndTime = endTime;
listOfTimes.Add(times);
startTime++;
endTime++;
}
return listOfTimes;
}
我第一次在times,times.StartTime = 8和times.EndTime = 9中添加值。 当我第二次循环时,我添加9和10,但同时也将已经添加的8和9更改为9和10。为什么会发生,如何解决?
答案 0 :(得分:6)
因为每次都有相同的Times
对象,所以您必须在循环中创建一个新对象:
for (int i = 0; i < 8; i++)
{
var times = new Times();
times.StartTime = startTime;
times.EndTime = endTime;
listOfTimes.Add(times);
startTime++;
endTime++;
}
答案 1 :(得分:0)
EpicKip的答案已经解决了您的问题(我对此表示赞同),但这是使用Linq的替代方法。如果您不熟悉Linq,请检查它;)
public static List<Time> CreateListOfTimes()
{
return Enumerable.Range(8, 8).Select(i => new Times
{
StartTime = i,
EndTime = i + 1
}).ToList();
}
在这里我们使用Enumerable.Range和Enumerable.Select。 ToList()
并不是真正需要的。我使用它来尊重CreateListOftimes()
的签名。