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))

ポイントがそれらのいずれにも含まれていない場合に何をしたいかによっては、 onlyを使用することもできますFirst(ポイントがそれらのいずれにも含まれていない場合は例外がスローされます)。FirstOrDefault(クラスを使用していると仮定して)デフォルト(サイズにある)を返すSystem.Windows.Rectため、確認が難しい場合があります。Rect0,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 に答える