我有一个像这样的正方形形状,分为9个矩形:
所以我想要而不是制作这样的长列表:
if(rectForward.Contains(touchPoint))
{
return rectForward;
}
else if(rectForwardRight.Contains(touchPoint))
{
return rectForwardRight;
}
//and so on!
使用linq查询快速查看哪个Rectangle
包含Point
touchPoint。
好吧,我可以利用我在这个问题上花费的时间来编写if / else的东西,但我希望看到它与linq
答案 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))