1

我可以看到为什么这是允许的:

foreach (var paralelos in ParalelosSeleccionadosTemp)
{
    foreach (var horario in paralelos.Horarios)
    {
        for (int i = 0; i < horario.DetallesHorario.Count; i++)
        {
            if (feriados.Contains(horario.DetallesHorario[i].Fecha.Value))
            {
                horario.DetallesHorario.RemoveAt(i);
                i--;
            }
        }
    }
}

但是这个怎么样?

ParalelosSeleccionadosTemp
    .ForEach(p => p.Horarios.ToList()
        .ForEach(q => q.DetallesHorario.ToList()
            .RemoveAll(x => feriados.Contains(x.Fecha.Value))));

我不明白为什么这会失败并且不会删除任何项目。

4

2 回答 2

7

ToList()创建集合的副本。因此原件不受影响。

要使第二个代码段正常工作,您需要做的就是删除不必要的调用ToList()

ParalelosSeleccionadosTemp
    .ForEach(p => p.Horarios.ToList()
        .ForEach(q => q.DetallesHorario
            .RemoveAll(x => feriados.Contains(x.Fecha.Value))));

当然,只有在DetallesHorariotype 的情况下才有效List<T>。否则,您需要调整它以使用适当的方法(或创建一个)从该集合中删除元素。

请注意,if Horariosis a List<T>then 的第一次调用ToList()也已过时。

于 2013-11-07T22:31:25.810 回答
0

创建一个新.ToList()列表并对其进行修改,因此您的列表不会更新。

这样做的方法是第一个选项,或者删除.ToList()

于 2013-11-07T22:31:45.607 回答