2012-08-05 6 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()이 예외를 throw하지만 .First()이 첫 번째를 반환하는 경우 예외가 발생한다는 것입니다.

+0

+1은 SO를 허용하는 즉시이를 수락합니다. :) – ApprenticeHacker

관련 문제