2012-08-05 41 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; 

} 

我該怎麼辦?

回答

16

您可以使用.First().FirstOrDefault()擴展方法,使您可以檢索的第一個元素相匹配的特定條件:

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

.First()擴展方法將拋出一個異常,如果沒有元素在數組中發現,符合所需條件。另一方面,.FirstOrDefault()將靜默地返回null。因此,請使用更適合您需求的產品。

請注意,還有您可以使用的.Single()擴展方法。與.First()的區別在於,如果多個元素匹配條件,則.Single()將引發異常,而.First()將返回第一個元素。

+0

+1,只要SO讓我接受。 :) – ApprenticeHacker 2012-08-05 16:14:25