C# 使用INQ LINQ检查多个矩形中点的存在性

C# 使用INQ LINQ检查多个矩形中点的存在性,c#,linq,C#,Linq,我有一个这样的正方形,分为9个矩形: 所以我不想列一长串这样的清单: if(rectForward.Contains(touchPoint)) { return rectForward; } else if(rectForwardRight.Contains(touchPoint)) { return rectForwardRight; } //and so on! 使用linq查询快速检查哪个矩形包含点接触点 我可以用我在这个问题上花费的时间来写if/else,但我想看看它与

我有一个这样的正方形,分为9个矩形:

所以我不想列一长串这样的清单:

if(rectForward.Contains(touchPoint))
{
   return rectForward;
}
else if(rectForwardRight.Contains(touchPoint))
{
    return rectForwardRight;
}
//and so on!
使用linq查询快速检查哪个
矩形
包含
接触点


我可以用我在这个问题上花费的时间来写if/else,但我想看看它与
linq

的关系如何尝试将所有矩形存储在一个集合中,然后对它们进行迭代变得很简单:

return myRectangles.FirstOrDefault(rect => rect.Contains(touchPoint))
如果点不包含在其中任何一个中,则根据您要执行的操作,您可能只想先使用
(如果点不包含在其中任何一个中,则会引发异常)
FirstOrDefault
将(假设您使用的是
System.Windows.Rect
类)返回一个默认的
Rect
(位于
0,0
,大小为
0
的位置),因此可能难以检查

如果不想将矩形存储在集合中,可以编写一个简单的帮助器方法,按顺序迭代这些矩形,并在需要时利用它们:

private IEnumerable<Rect> GetSections()
{
    yield return rectForward;
    yield return rectForwardRight;
    yield return rectRight;
    ...
}
return GetSections().FirstOrDefault(rect => rect.Contains(touchPoint))