Ayer me escribió el siguiente código C# (se ha reducido un poco de legibilidad):¿Por qué no puedo cambiar elementos de un linq IEnumerable en un bucle for?
var timeObjects = (from obj in someList
where (obj.StartTime != null)
select new MyObject()
{
StartTime= obj.StartTime.Value,
EndTime = obj.EndTime
})
Así que cada elemento tiene un horaInicio y algunos tienen un EndTime (otros tienen nulo como EndTime).
Si tanto de inicio y fin de los tiempos se conocen quería calcular el tiempo transcurrido:
foreach (var item in timeObjects)
{
if (item.EndTime == null)
{
item.elapsed = 0;
}
else
{
item.elapsed = (item.EndTime.Value - item.StartTime).Minutes;
}
}
Pero esto no funciona! la colección timeObjects nunca cambia.
Si digo:
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)
que hace el trabajo.
Me gustaría saber por qué es esto?