LINQ RemoveAll而不是循环

use*_*744 2 c# linq

我有两个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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我能够做到这一点,但编译器不理解这段代码:

points.RemoveAll(p => touchingRects.Where(r => r.HitTest(p, r.TopEdge.Y1)));
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

p.s*_*w.g 6

你传入的代表RemoveAll需要返回一个bool.

我想你该怎么做:

points.RemoveAll(p => touchingRects.Any(r => r.HitTest(p, r.TopEdge.Y1)));
Run Code Online (Sandbox Code Playgroud)

或者可能这样(如果变量rect实际上在别处定义):

points.RemoveAll(p => touchingRects.Any(r => r.HitTest(p, rect.TopEdge.Y1)));
Run Code Online (Sandbox Code Playgroud)

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