LINQ RemoveAll代替循环 - c#

我有两个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的委托需要返回布尔值。

我认为您该怎么做:

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

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

.Net LINQ-使用其他字典过滤字典 - c#

我有两个相同类型的字典,A和B。Dictionary<string, IEnumerable<object>> 我使用对象来表示具有属性“ Id”的复杂类型。我正在寻找A中具有B中存在的对象(使用Id)但在另一个键下的所有项目。基本上是要判断对象是否已移动键。 A是新字典,B是旧字典。有没有使用LINQ完成此操作的合理方法?我希望结果…

LINQ to XML语法 - c#

我有一个简单的POCO类,用于保存从XML文件提取的数据,该XML文件定义如下:public class Demographics { public string FirstName { get; set; } public string LastName { get; set; } public string MiddleName { get; set; …

如何使用LINQ进行投射? - c#

我有以下代码段,我的问题是,如何使用简化的语法(也许使用LINQ语法)进行转换? private ObservableCollection<ISelectableItem> GetSelectableUnits(ObservableCollection<Unit> units) { var selectableUnits = new …

LINQ中的动态查询 - c#

我在Web表单中有四个按钮,它们的目的分别是加载第一条,上一条,下一条和最后一条记录。他们通过获取表单中加载的当前ID并根据需要执行操作。我正在使用Linq to SQL。下面是我用于NEXT记录的代码,如果我想通过ID加载下一条记录,则该函数运行良好。var dx = new DataModelDataContext(); List<Dog> …

如何基于派生类字段过滤基类集合? - c#

假设我有一个名为MyThings的集合,其中包含类Thing的对象,并且我有一个名为ShinyThing的类,该类是从Thing派生的,所以我这样做:MyThings boxWithMyThings = new MyThings(); ShinyThing Diamond = new ShinyThing(){ facets = 10; weight = 5…