• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

List.Foreach与C#的foreach的区别【转】

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

List.Foreach可以增删集合项,而foreach不行。

public static void Main()
{
    List<T_Info_PriorApplys> list = new List<T_Info_PriorApplys>();
    list.Add(new T_Info_PriorApplys() { });
    list.Add(new T_Info_PriorApplys() { });
    list.ForEach(item => item.ApplyNo = "testNo" + list.IndexOf(item));
    list.ForEach(p =>
    {
        if (p.ApplyNo == "testNo0")
        {
            list.Remove(p);
            list.Insert(0, new T_Info_PriorApplys { ApplyNo = "NewNo0-1" });
            list.Add(new T_Info_PriorApplys { ApplyNo = "NewNo0-2" });
        }

    });


    list.ForEach(item => Console.WriteLine(item.ApplyNo));
    Console.Read();
}

/* 运行结果:
NewNo0-1
testNo1
NewNo0-2
*/

需说明的是,使用Foreach时,当集合的元素增加后,由于索引器是从0开始的,新的元素如果在当前索引的后面,则也会参与遍历,如果在当前索引前,则当前元素会再次参与遍历。  所以, 如果在改变元素个数时没有条件, 会导致死循环。代码见下方:

list.ForEach(p =>
{
            list.Remove(p);
            list.Insert(0, new T_Info_PriorApplys { ApplyNo = "NewNo0-1" });
            list.Add(new T_Info_PriorApplys { ApplyNo = "NewNo0-2" });
});

 

用 foreach实现上面的逻辑时, 当新增完元素之后,下一次迭代时,会报异常 System.InvalidOperationException:集合已修改;可能无法执行枚举操作。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
用BouncyCastle的C#版API产生公钥和私钥发布时间:2022-07-10
下一篇:
c#类(class)发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap