2012-08-05 16 views
5

Temelde ben LINQ için bu kodu uyarlamak istiyorum:Sadece LINQ'da ilk nesneyi seçin?

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

    return null; 
} 

kodu, her karo kontrol eder ve nesne ile çarpışır ilk taşı döndürür.

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

} 

ne yapmalıyım: Sadece ilk karo, ben değil bu kullanırsam alacağı gibi karoların bir dizi istiyorsun?

cevap

16

Sen belirli bir koşulu eşleşen ilk elemanı almak için izin verir .First() veya .FirstOrDefault() uzatma yöntemi kullanabilirsiniz: hayır eleman dizide bulunursa

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

.First() uzatma yöntemi bir özel durum olacağını gerekli koşulu eşleştirir. Diğer taraftan .FirstOrDefault(), sessizce boşa dönecektir. Öyleyse ihtiyacınıza daha uygun olanı kullanın.

Kullanabileceğiniz .Single() uzantı yönteminin de olduğuna dikkat edin. .First() arasındaki fark, .First() ilk koşulu döndürürken, birden fazla öğe bu koşulla eşleşirse .Single() bir istisna atar.

+0

+1, SO'nun bana izin verdiği anda bunu kabul edecektir. :) – ApprenticeHacker

İlgili konular