2

I have two for loops to remove item from the list. I am looking for an equivalent LINQ statement for these loops

for (Int32 i = points.Count - 1; i >= 0; i--)
{
    for (Int32 j = touchingRects.Count - 1; j >= 0; j--)
    {
        if (touchingRects[j].HitTest(points[i], rect.TopEdge.Y1))
        {
            points.RemoveAt(i);
        }
    }
}

So far I am able to do this but the compiler doesn't understand this code:

points.RemoveAll(p => touchingRects.Where(r => r.HitTest(p, r.TopEdge.Y1)));

Any help will be appreciated.

4

1 回答 1

6

您传入的委托RemoveAll需要返回一个布尔值。

我想你该怎么做:

points.RemoveAll(p => touchingRects.Any(r => r.HitTest(p, r.TopEdge.Y1)));

或者可能是这个(如果变量rect实际上是在其他地方定义的):

points.RemoveAll(p => touchingRects.Any(r => r.HitTest(p, rect.TopEdge.Y1)));

我应该指出,您的原始代码可能会出现一些非常奇怪的行为。从内部循环的列表中删除一个项目后,您将继续touchingRects使用相同的索引进行循环i。这可能会导致一些意想不到的结果。那里可能应该有一个break,但为了简洁起见,您可能已经从您的问题中省略了它。无论如何,使用此代码可以解决该问题。

于 2013-06-13T23:15:22.673 回答