昨天我写了下面的C#代码(缩短一点的可读性):为什么我不能在for循环中更改linq IEnumerable中的元素?
var timeObjects = (from obj in someList
where (obj.StartTime != null)
select new MyObject()
{
StartTime= obj.StartTime.Value,
EndTime = obj.EndTime
})
因此,每个项目都有一个开始时间和一些有一个结束时间(其他有null作为结束时间)。
如果同时开始和结束时间是已知的,我想计算经过时间:
foreach (var item in timeObjects)
{
if (item.EndTime == null)
{
item.elapsed = 0;
}
else
{
item.elapsed = (item.EndTime.Value - item.StartTime).Minutes;
}
}
但是,这并不工作! timeObjects集合永远不会改变。
如果我说:
var timeObjects = (from obj in someList
where (obj.StartTime != null)
select new MyObject()
{
StartTime= obj.StartTime.Value,
EndTime = obj.EndTime
}).ToList();
foreach (var item in timeObjects)
{
if (item.EndTime == null)
{
item.elapsed = 0;
}
else
{
item.elapsed = (item.EndTime.Value - item.StartTime).Minutes;
}
}
//(only change is the ToList() at the end of the linq statement)
它的工作。
我非常想知道这是为什么?