2 回答

TA貢獻1998條經驗 獲得超6個贊
只需調用ToArray()或ToList()實際執(zhí)行設置的代碼flag:
var newList = list.Where(item =>
{
flag = true;
return item == "2";
}).ToArray();
Where在實際枚舉列表之前,不會評估傳遞給方法的謂詞。

TA貢獻1825條經驗 獲得超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 導致執(zhí)行位置并設置您的標志。
順便說一句,我真的建議不要使用 where 謂詞來產生副作用,但這就是你要做的。
- 2 回答
- 0 關注
- 122 瀏覽
添加回答
舉報