Вчера я написал следующий код С# (немного сокращенный для удобочитаемости):
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)
это работает.
Очень хотелось бы узнать, почему это?