2013-01-03 14 views
1

我有一個正方形的形狀像這樣被devided 9個矩形:檢查多個矩形點的presense usinq LINQ

enter image description here

所以我想,而不是製作這樣一個長長的清單:

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

迅速用LINQ查詢檢查哪些Rectangle包含Point接觸點。

嗯,我可以使用,我花了在這個問題上寫的if/else東西的時間,但我想看看它是如何與linq

回答

3

去嘗試存儲集合中的所有的矩形,然後就變成瑣碎遍歷它們:

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

取決於你想要做什麼,如果該點包含在其中任何一個,你可能希望使用First只(這將拋出一個異常,如果該點ISN不包含任何人); 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))