我有两个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)
任何帮助将不胜感激.
你传入的代表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有某个地方,但为了简洁起见,你可能已经从你的问题中省略了.无论如何,使用此代码可以解决该问题.
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |