1

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

在此处输入图像描述

所以我不想像这样列出一长串:

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

使用 linq 查询快速检查哪个Rectangle包含Point接触点。

好吧,我可以利用我花在这个问题上的时间来写 if/else 的东西,但我想看看它是如何进行的linq

4

1 回答 1

3

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

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

如果该点不包含在其中任何一个中,则取决于您要执行的操作,您可能只想使用(如果该点First包含在其中任何一个中,则会引发异常);FirstOrDefault将(假设您正在使用System.Windows.Rect该类)返回一个默认值Rect(位于size 处) 0,00因此可能难以检查。

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

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

您的 Linq 调用将使用的对象:

return GetSections().FirstOrDefault(rect => rect.Contains(touchPoint))
于 2013-01-03T02:27:30.930 回答