2

我有一个包含 100,000 个对象的 BindingList。每个对象都包含一个 bool 属性,指示该对象是否已被修改。我基本上想遍历对象,当我找到一个将该 bool 属性设置为 true 的对象时,我想将其设置为 false。与此类似的东西:

foreach (myObject obj in bindingListOfMyObjects)
{
    if (obj.Modified)
    {
        obj.Modified = false;
    }
}

是否可以使用 LINQ 做到这一点?那会比上面的代码更快吗?

4

2 回答 2

2

不,在 LINQ 中无法做到这一点。为此,您需要直接在BindingList. LINQ 只会返回一个新的IEnumerable.

于 2013-01-25T17:55:26.510 回答
2

您可以使用Enumerable.Where来过滤集合,并在您的循环中修改它们:

foreach (myObject obj in bindingListOfMyObjects.Where(o => o.Modified))
     obj.Modified = false;

这不会更快,尽管理解意图可能会稍微容易一些。

请注意,一般情况下,您不会使用 LINQ 来实际进行修改 - LINQ 查询,就其性质而言,不应引起副作用(更改值)。它们旨在用作查询- 因此过滤对象是合适的,然后在循环中设置。有关详细信息,我建议阅读Eric Lippert 关于 ForEach 与 foreach 的帖子

于 2013-01-25T18:00:49.660 回答