我有两个for循环来从列表中删除项。我正在为这些循环寻找一个等价的LINQ语句
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);
}
}
}到目前为止,我能够做到这一点,但编译器不能理解以下代码:
points.RemoveAll(p => touchingRects.Where(r => r.HitTest(p, r.TopEdge.Y1)));任何帮助都将不胜感激。
发布于 2013-06-14 07:15:23
传递给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)));我应该指出的是,您的原始代码可能会出现一些非常奇怪的行为。从内部循环中的列表中删除一项后,继续使用相同的索引i遍历touchingRects。这可能导致一些意想不到的结果。可能在某个地方应该有一个break,但为了简短起见,您可能在问题中省略了它。在任何情况下,使用此代码都可以修复该问题。
https://stackoverflow.com/questions/17098726
复制相似问题