使用LINQ检查多个矩形中的点的存在

时间:2013-01-03 02:25:24

标签: c# linq

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

enter image description here

所以我想要而不是制作这样的长列表:

if(rectForward.Contains(touchPoint))
{
   return rectForward;
}
else if(rectForwardRight.Contains(touchPoint))
{
    return rectForwardRight;
}
//and so on!

使用linq查询快速查看哪个Rectangle包含Point touchPoint。

好吧,我可以利用我在这个问题上花费的时间来编写if / else的东西,但我希望看到它与linq

的关系

1 个答案:

答案 0 :(得分:3)

尝试将所有矩形存储在一个集合中,然后迭代它们变得微不足道了:

return myRectangles.FirstOrDefault(rect => rect.Contains(touchPoint))

如果其中任何一个点中包含 not ,则根据您要执行的操作,您可能只想使用First(如果该点不是,则会引发异常)其中任何一个都包含); FirstOrDefault将(假设您正在使用System.Windows.Rect类)返回默认Rect(位于0,0且大小为0),因此可能很难检查。

如果您不想将矩形存储在集合中,您可以编写一个简单的辅助方法,按顺序迭代它们并在您希望时利用它:

private IEnumerable<Rect> GetSections()
{
    yield return rectForward;
    yield return rectForwardRight;
    yield return rectRight;
    ...
}

您的Linq呼叫将使用:

return GetSections().FirstOrDefault(rect => rect.Contains(touchPoint))