어제는 다음과 같은 C# 코드 (읽기 쉽도록 축소되었습니다)를 작성했습니다.for 루프에서 linq IEnumerable의 요소를 변경할 수없는 이유는 무엇입니까?
var timeObjects = (from obj in someList
where (obj.StartTime != null)
select new MyObject()
{
StartTime= obj.StartTime.Value,
EndTime = obj.EndTime
})
따라서 각 항목에는 startTime이 있고 일부에는 EndTime이 있습니다 (다른 항목은 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)
그것은 작동하지 않습니다.
이것이 왜 있는지 알고 싶습니다.