2 回答

TA贡献1998条经验 获得超6个赞
只需调用ToArray()或ToList()实际执行设置的代码flag:
var newList = list.Where(item =>
{
flag = true;
return item == "2";
}).ToArray();
Where在实际枚举列表之前,不会评估传递给方法的谓词。

TA贡献1825条经验 获得超6个赞
Linq 查询是惰性的,所以在您枚举 newList 之前,您不会看到任何变化,因为您的 where 尚未执行。
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 导致执行位置并设置您的标志。
顺便说一句,我真的建议不要使用 where 谓词来产生副作用,但这就是你要做的。
- 2 回答
- 0 关注
- 95 浏览
添加回答
举报