C Linq ForEach 使用請注意

2021-09-01 08:06:38 字數 1097 閱讀 5452

使用c# linq的確給我們帶來了很多的方便,但是如果不合理使用,會造成一些隱藏的bug,而且很難被發現。

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

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

listlist = new list();

for (int i = 0; i < 1000; i++)

il.foreach(x => il.remove(x));
為了簡化**,在此不加條件語句。

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

可以看到在執行完foreach之後list中還有500項。

想必高手們應該之後了吧?在對list進行刪除的時候,list整個集合的index已經發生了變化。

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

原index:

3,4,5,6

remove()後

index:

2,3,4,5

其實以上**等價於:

所以大家應該知道什麼原因了吧?

所以應對以上bug,並且使用簡介的linq,正確的辦法是:

for (int i = 0; i  

});

tolist()會new 乙個list,然後對新的list進行遍歷,刪除舊list中與之對應index的值,至少這樣的寫法是對的。但是最優的辦法是使用list中的removeall(predicatematch)方法,該方法還會return 被刪除的items的個數。

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

請避免直接使用Thread

xiongwanping 2018.04.12 本文件是為了引出baselooper框架做下鋪墊,先提出問題,後面會給出解決辦法。linux 包括linux,android,osx,ios 和windows都提供了執行緒函式,但其粒度太大,比如pthread create,只是把執行緒建立並跑起來,...

使用requests傳送get post請求

首先是安裝requests庫 pip install requests 匯入requests庫 import requests 定義乙個url 入參直接寫在url內,使用問號隔開 url test 返回的資料定義為r url賦值為之前定義的值 r requests.get url url test ...

使用Fiddler 檢視監視除錯HTTP請求響應

fiddler 是個很大的http處理請求響應工具 可以構建http請求並檢視請求響應資訊 介紹 http www.cnblogs.com backuper archive 2008 12 31 1365984.html 下面是學習http請求響應筆記 請求過程中的快取 當客戶端需要乙個資源 htm...