다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.
1. Single
1-1) Single
LINQ에서 SIngle()은 정확히 1개의 요소만 반환한다.
만약 어떤 요소도 포함되지 않거나 여러 개의 요소가 포함되는 경우 Single()은 예외를 유발한다.
결괏값으로 한 개밖에 존재하지 않는다는 것을 강력히 제한하고 싶을 때 사용하자.
1-2) SingleOrDefault()
어떤 요소도 포함되지 않을경우 기본값을 반환(참조 타입은 null)한다. 하지만 역시 결괏값이 2개 이상이면 예외를 일으킨다.
2. First
2-1) First()
여러 개의 값이 반환되는 경우 첫 번째 요소만을 가져온다. 역시 어떤 요소도 포함되지않는다면 예외를 발생시킨다.
2-2) FirstOrDefault()
첫번째 요소를 반환하며, 어떤 요소도 포함되지 않을 경우 기본값을 반환(참조 타입은 null)한다.
2-3) 원하는 한개의 요소 가져오기
당연히 단순히 한개의 요소를 가져오는 것으로 해결되지 않는 경우가 많기 때문에
First()를 실행하기 전 첫 번째 위치로 옮기기 위해서 정렬을 수행하는 것도 하나의 방법이다.
2-4) 특정 위치의 요소 가져오기
Skip()과 First()를 함께 사용하여 원하는 요소를 가져올 수 있다. 하지만 요소의 총개수가 3개 이상이라는 가정이 있다.
var answer = (from p in Forwards
where p.GoalsScored > 0
orderby p.GoalsScored
select p).Skip(2).First(); // 세번째 요소를 반환한다.
3. 결론
Single()과 First()를 의미적으로 구분지어서 사용하도록 하자.
'🌍 C# Study > 이펙티브 C#' 카테고리의 다른 글
[45] 메서드가 실패했음을 알리기 위해서 예외를 이용하라 (0) | 2021.05.12 |
---|---|
[44] 바인딩 된 변수는 수정하지 말라 (0) | 2021.05.12 |
[42] IEnumerable<T> 데이터 소스와 IQueryable<T> 데이터 소스를 구분하라 (0) | 2021.05.12 |
[41] 값비싼 리소스를 캡처하지 마라 (0) | 2021.05.03 |
[40] 지연 수행과 즉시 수행을 구분하라 (0) | 2021.05.02 |