首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ RemoveAll代替循环

LINQ RemoveAll代替循环
EN

Stack Overflow用户
提问于 2013-06-14 07:12:23
回答 1查看 170关注 0票数 2

我有两个for循环来从列表中删除项。我正在为这些循环寻找一个等价的LINQ语句

代码语言:javascript
复制
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);
        }
    }
}

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

代码语言:javascript
复制
points.RemoveAll(p => touchingRects.Where(r => r.HitTest(p, r.TopEdge.Y1)));

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-14 07:15:23

传递给RemoveAll的委托需要返回一个布尔值。

我想你应该怎么做:

代码语言:javascript
复制
points.RemoveAll(p => touchingRects.Any(r => r.HitTest(p, r.TopEdge.Y1)));

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

代码语言:javascript
复制
points.RemoveAll(p => touchingRects.Any(r => r.HitTest(p, rect.TopEdge.Y1)));

我应该指出的是,您的原始代码可能会出现一些非常奇怪的行为。从内部循环中的列表中删除一项后,继续使用相同的索引i遍历touchingRects。这可能导致一些意想不到的结果。可能在某个地方应该有一个break,但为了简短起见,您可能在问题中省略了它。在任何情况下,使用此代码都可以修复该问题。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17098726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档