C# C从位于特定点的列表中获取所有AOI

C# C从位于特定点的列表中获取所有AOI,c#,lambda,ienumerable,C#,Lambda,Ienumerable,我有一个感兴趣的AOI区域列表,其中AOI由左上角和右下角的起点和终点两个点定义 我有一个由PosX和PosY定义的点 我想从特定点所在的列表中获取所有此类AOI。我如何才能最有效地做到这一点?我想用带有lambda表达式的select和where函数来实现它,但不知道如何实现它 我创建了一个包围AOI的矩形,并测试了其中是否有一个点: var rect = new RectangleF(aoi.Start.X, aoi.Start.Y, aoi.End.X - aoi.Start.X, aoi

我有一个感兴趣的AOI区域列表,其中AOI由左上角和右下角的起点和终点两个点定义

我有一个由PosX和PosY定义的点

我想从特定点所在的列表中获取所有此类AOI。我如何才能最有效地做到这一点?我想用带有lambda表达式的select和where函数来实现它,但不知道如何实现它

我创建了一个包围AOI的矩形,并测试了其中是否有一个点:

var rect = new RectangleF(aoi.Start.X, aoi.Start.Y, aoi.End.X - aoi.Start.X, aoi.End.Y - aoi.Start.Y));
var liesIn = rect.Contains(pt.PosX, pt.PosY);
但我有一个清单。若我想要列表中包含点pt的所有AOI,我必须遍历所有列表,或者我能以某种方式有效地完成吗

编辑:好的,我想出来了。这对我有用

var result = AOIs.Where(a => new RectangleF(a.Start.X, a.Start.Y, a.Start.X - a.End.X, a.Start.Y - a.End.Y).Contains(pt.PosX, pt.PosY)).ToList();

我不知道是怎么回事,我做了一些奇怪的事情,但解决方法很简单。

我想是这样的:

AOIs.Where(x => 
    x.Start.X < posX
 && x.Start.Y < posY 
 && x.End.X > posX 
 && x.End.Y > posY)

是的,可能是。我刚刚写了这个AOIs.where=>new RectangleFa.Start.X,a.Start.Y,a.Start.X-a.End.X,a.Start.Y-a.End.Y.Containspt.PosX,pt.PosY.ToList;我想你的解决方案也可以,但我会保留我的:D谢谢