我明白为什么这是允许的:
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))));
我不明白为什么这会失败并且没有删除任何项目。
最佳答案
ToList()
创建集合的副本。因此,原始文件不受影响。
要使第二个代码片段正常工作,您需要做的就是删除对 ToList()
的不必要调用。 :
ParalelosSeleccionadosTemp
.ForEach(p => p.Horarios.ToList()
.ForEach(q => q.DetallesHorario
.RemoveAll(x => feriados.Contains(x.Fecha.Value))));
这当然只有在 DetallesHorario
时才有效类型为 List<T>
.否则,您需要调整它以使用适当的方法(或创建一个方法)从该集合中删除元素。
还请注意 if Horarios
是 List<T>
然后第一个电话ToList()
也已过时。
关于c# - 使用 linq 在 foreach 中删除所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19847983/