我有一个包含100,000个对象的BindingList。每个对象都包含一个bool属性,指示对象是否已被修改。我基本上想要遍历对象,当我发现一个bool属性设置为true时,我想将其设置为false。类似的东西:
foreach (myObject obj in bindingListOfMyObjects)
{
if (obj.Modified)
{
obj.Modified = false;
}
}
是否可以使用LINQ执行此操作?那会比上面的代码更快吗?
答案 0 :(得分:2)
没有。在LINQ中无法做到这一点。为此,您需要直接在BindingList
中修改元素。 LINQ只会返回一个新的IEnumerable
。
答案 1 :(得分:2)
您可以使用Enumerable.Where
过滤集合,然后在循环中修改它们:
foreach (myObject obj in bindingListOfMyObjects.Where(o => o.Modified))
obj.Modified = false;
这不会更快,但理解意图可能会稍微容易一些。
请注意,通常情况下,您不会使用LINQ来实际进行修改 - LINQ查询本质上不应导致副作用(更改值)。它们旨在用作查询 - 因此过滤对象是合适的,然后设置循环。有关详情,建议您阅读Eric Lippert's post on ForEach vs foreach。