2012-08-05 37 views
5

は基本的に私は、LINQのために、このコードを適応したい: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; 

} 

私は何をすべき?どの要素があること、配列に見つからない場合.First()拡張メソッドが例外をスローします

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

答えて

16

あなたは、特定の条件に一致する最初の要素を取得することができます.First()または.FirstOrDefault()拡張メソッドを使用することができます必要な条件と一致します。一方、.FirstOrDefault()は、黙ってnullを返します。だからあなたのニーズに合ったものを使いましょう。

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

+0

+1は、すぐにそれを受け入れてくれます。 :) – ApprenticeHacker

関連する問題