使用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; itolist()會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...