gpt4 book ai didi

c# - LINQ RemoveAll 而不是循环

转载 作者:行者123 更新时间:2023-12-03 05:14:59 25 4
gpt4 key购买 nike

我有两个 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)));

任何帮助将不胜感激。

最佳答案

您传递给 RemoveAll 的委托(delegate)需要返回一个bool。

我想你该怎么做:

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)));

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

关于c# - LINQ RemoveAll 而不是循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17098726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com