5

基本的に、このコードをLINQに適合させたいと思います。

private Tile CheckCollision(Tile[] tiles)
{
    foreach (var tile in tiles)
    {
        if (tile.Rectangle.IntersectsWith(Rectangle))
        {
            return tile;
        }
    }

    return null;
}

コードは各タイルをチェックし、オブジェクトと衝突する最初のタイルを返します。これを使用した場合に得られるようなタイルの配列ではなく、最初のタイルのみが必要です。

private Tile CheckCollision(Tile[] tiles)
{
    var rtn = 
        from tile in tiles
        where tile.Rectangle.IntersectsWith(Rectangle)
        select tile;

}

私は何をすべきか?

4

1 に答える 1

16

.First()特定の条件に一致する最初の要素を取得できるor.FirstOrDefault()拡張メソッドを使用できます。

private Tile CheckCollision(Tile[] tiles)
{
    return tiles.FirstOrDefault(t => t.Rectangle.IntersectsWith(Rectangle));
}

.First()必要な条件に一致する要素が配列に見つからない場合、extensionメソッドは例外をスローします。一方.FirstOrDefault()、はサイレントにnullを返します。したがって、ニーズにより適したものを使用してください。

.Single()使用できる拡張メソッドもあることに注意してください。との違い.First()は、.Single()複数の要素が条件に一致する場合に例外をスローするのに対し.First()、最初の要素を返すことです。

于 2012-08-05T16:04:17.990 に答える