list=newList();for(inti=0;i<1000;i++){list.Add(newClassA());}il.ForEach(x=>il.Remove(x));為了簡化代碼,在此不加條件語句。以上代" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

C# Linq ForEach 使用請注意

系統(tǒng) 2518 0

使用C# Linq的確給我們帶來了很多的方便,但是如果不合理使用,會造成一些隱藏的bug,而且很難被發(fā)現(xiàn)。

今天我就分享一個工作中遇到的問題。


需求:對list進行遍歷,把滿足某一條件的item Remove掉。

    List<ClassA> list = new List<ClassA>();
for (int i = 0; i < 1000; i++)
{
    list.Add(new ClassA());
}
  
    il.ForEach(x => il.Remove(x));
  

?
為了簡化代碼,在此不加條件語句。

以上代碼貌似是把list中所有的item都Remove掉,但其實不然。


C# Linq ForEach 使用請注意

可以看到在執(zhí)行完ForEach之后list中還有500項。

想必高手們應(yīng)該之后了吧?在對list進行刪除的時候,list整個集合的index已經(jīng)發(fā)生了變化。

Remove一次,原來集合的index就會整體向前移動一個。

?

原index:

3,4,5,6

Remove()后

index:

2,3,4,5
?

其實以上代碼等價于:

    List<IA> list = new List<IA>();
for (int i = 0; i < 1000; i++)
{
    list.Add(new ClassA());
}
for (int i = 0; i < 500; i++)
{
    list.Remove(list[i]);
}
  

?
C# Linq ForEach 使用請注意

所以大家應(yīng)該知道什么原因了吧?

所以應(yīng)對以上bug,并且使用簡介的Linq,正確的辦法是:

    for (int i = 0; i <list.Count; i++)
{
??? if (list[i].a==0)
??? {
??????? list.RemoveAt(i);
??????? i--;
??? }
}
  

?

    list.ToList().ForEach(x => {
    if (x.a==0)
    {
        list.Remove(x);
    }
});
  

ToList()會new 一個list,然后對新的list進行遍歷,刪除舊list中與之對應(yīng)index的值,至少這樣的寫法是對的。但是最優(yōu)的辦法是使用List<T>中的RemoveAll(Predicate<T> match)方法,該方法還會return 被刪除的items的個數(shù)。

    list.RemoveAll(x => x.a == 0);
  

?

C# Linq ForEach 使用請注意


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 香蕉久久夜色精品国产小说 | 天天操夜夜爽 | 99热精品6| 七七七久久久久人综合 | 国内精品福利视频 | 久久综合精品国产一区二区三区 | 国内精品久久久久影院中国 | 男人你懂的网站 | 精品亚洲视频在线 | 国产女人综合久久精品视 | 亚洲精品第一页中文字幕 | 大尺度福利视频在线观看网址 | 青草青青在线视频观看 | 青草青草久热精品视频在线观看 | 免费一级毛片在线观看 | 91日韩| 欧美日韩在线成人免费 | 国产精品久久久久久久久久一区 | 最新国产精品精品视频 | 久久人人干 | 91在线免费公开视频 | 欧美精品成人久久网站 | 日韩欧美在线观看成人 | 女bbbbxxxx毛片视频0 | 日本视频在线观看不卡高清免费 | 午夜欧美精品久久久久久久久 | 亚洲乱码视频 | 国产一区二区三区日韩欧美 | 成人a毛片久久免费播放 | 亚洲国产综合精品中文字幕 | 狠狠地日| 四虎精品影视 | 欧美一级久久 | 国产亚洲女人久久久久久 | 青青青国产免费线在 | 99久久综合久中文字幕 | 伊人亚洲综合网 | 欧美另类日韩中文色综合 | 精品一区二区三区在线观看视频 | 国产成人精品久久一区二区小说 | 国产欧美亚洲精品综合在线 |