2 回答
TA貢獻(xiàn)1998條經(jīng)驗 獲得超6個贊
只需調(diào)用ToArray()或ToList()實際執(zhí)行設(shè)置的代碼flag:
var newList = list.Where(item =>
{
flag = true;
return item == "2";
}).ToArray();
Where在實際枚舉列表之前,不會評估傳遞給方法的謂詞。
TA貢獻(xiàn)1825條經(jīng)驗 獲得超6個贊
Linq 查詢是惰性的,所以在您枚舉 newList 之前,您不會看到任何變化,因為您的 where 尚未執(zhí)行。
var list = new List<string> { "1", "2", "3", "4", "5" };
bool flag = false;
var newList = list.Where(item =>
{
flag = true;
return item == "2";
});
Console.WriteLine(flag); // Flag is still false.
foreach (var item in newList) {
// It doesn't matter what we do here, just that we enumerate the list.
}
Console.Write(flag); // Flag is now true.
foreach 導(dǎo)致執(zhí)行位置并設(shè)置您的標(biāo)志。
順便說一句,我真的建議不要使用 where 謂詞來產(chǎn)生副作用,但這就是你要做的。
- 2 回答
- 0 關(guān)注
- 133 瀏覽
添加回答
舉報
