昨天我寫了下面的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)
它的工作。
我非常想知道這是爲什麼?