首页 > C# > C# 如何在迭代泛型列表时从泛型列表中删除元素?

C# 如何在迭代泛型列表时从泛型列表中删除元素?

上一篇 下一篇

我正在寻找一种更好的模式来处理元素列表,每个元素都需要处理,然后根据结果从列表中删除。

您不能在内部使用(因为它会导致异常)…您也不能使用 ,因为它会破坏您在集合中相对于 的当前位置。.Remove(element)foreach (var element in X)Collection was modified; enumeration operation may not execute.for (int i = 0; i < elements.Count(); i++).RemoveAt(i)i

有没有一种优雅的方法可以做到这一点?

分割线

网友回答:

使用 for 循环反向迭代列表:

for (int i = safePendingList.Count - 1; i >= 0; i--)
{
    // some code
    // safePendingList.RemoveAt(i);
}

例:

var list = new List<int>(Enumerable.Range(1, 10));
for (int i = list.Count - 1; i >= 0; i--)
{
    if (list[i] > 5)
        list.RemoveAt(i);
}
list.ForEach(i => Console.WriteLine(i));

或者,可以将 RemoveAll 方法与谓词一起使用,以测试:

safePendingList.RemoveAll(item => item.Value == someValue);

下面是一个简化的示例来演示:

var list = new List<int>(Enumerable.Range(1, 10));
Console.WriteLine("Before:");
list.ForEach(i => Console.WriteLine(i));
list.RemoveAll(i => i > 5);
Console.WriteLine("After:");
list.ForEach(i => Console.WriteLine(i));

分割线

网友回答:

 foreach (var item in list.ToList()) {
     list.Remove(item);
 }

如果添加“.ToList()“到您的列表(或 LINQ 查询的结果)中,您可以直接从”列表“中删除”项目“,而无需可怕的”集合已修改;枚举操作可能无法执行。编译器会复制“list”,以便您可以安全地对数组进行删除。

虽然这种模式不是超级高效,但它有一种自然的感觉,并且几乎在任何情况下都足够灵活。例如,当您要将每个“项目”保存到数据库并仅在数据库保存成功时才将其从列表中删除时。

分割线

网友回答:

一个简单直接的解决方案:

在集合上使用向运行的标准 for 循环并删除元素。RemoveAt(i)

模板简介:该模板名称为【C# 如何在迭代泛型列表时从泛型列表中删除元素?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 280次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 04-20
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
自适应 html5 微信模板 单页式简历模板 微信文章 微信图片 响应式 微信素材 微信公众平台 企业网站
您可能会喜欢的其他模板