c# - 使用 linq 在 foreach 中删除所有内容

标签 c# linq

我明白为什么这是允许的:

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 HorariosList<T>然后第一个电话ToList()也已过时。

关于c# - 使用 linq 在 foreach 中删除所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19847983/

相关文章:

c# - IDocumentClient.UpsertDocumentAsync 不更新,它插入重复的 id

c# - 使用图形和数据在 c# 中读取、添加和编辑 excel 以及

c# - 向客户端显示来自 PL/SQL 过程的错误消息

c# - 如何查询子表值

C# - 读取 XML 文件

C# linq 选择列表中的对象查看另一个对象列表

c# - .NET 中的链接接缝

c# - 使用字典作为其他字典中的键

c# - Linq 查询生成器工具

c# - 动态 LINQ,Select 函数,适用于 Enumerable,但不适用于 Queryable