常見(jiàn)的Lambda表達(dá)式引起的閉包問(wèn)題
摘要:
以下代碼的原意是想找出list中滿足Name字段包含t, Remark字段包含mark的數(shù)據(jù)代碼不過(guò)實(shí)際情況是data中間一條記錄都沒(méi)有而hardcode算出來(lái)的data2中有3條記錄原因如下: 這個(gè)lambda表達(dá)式 Where(p=p.Name.Contains(val)) , 實(shí)際上只是保留了一個(gè)指向函數(shù)外部的val的引用 , 他這個(gè)時(shí)候并沒(méi)有把val的真實(shí)的值拷貝進(jìn)來(lái) 真正去讀取val值的時(shí)候是 lambda.ToList() 這個(gè)時(shí)候才真正執(zhí)行l(wèi)ambda表達(dá)式取數(shù)據(jù),過(guò)濾數(shù)據(jù) ,也是這個(gè)時(shí)候才去讀取val的值 而在foreach的第二次操作的時(shí)候 val的值被覆蓋mark了 閱讀全文
posted @ 2011-01-07 14:42 聽(tīng)說(shuō)讀寫(xiě) 閱讀(1893) 評(píng)論(0) 推薦(0)
浙公網(wǎng)安備 33010602011771號(hào)