무효 클릭 IP 추적 중...
c#

[c#] LINQ First vs Single | FirstOrDefault vs SingleOrDefault 차이

꼬예 2022. 7. 15.

 

 

이번 포스팅에서는 FirstSingle을 비교하고 FirstOrDefaultSingleOrDefault의 비교를 통해 각각의 개념을 알아보도록 하겠습니다.

 

 

1) single() vs first()

 

예제코드

 

1~9로 구성된 리스트에서 1에 해당하는 값을 추출하는 코드입니다.

각각 FirstSingle을 이용했는데요. 

 

어떤 결과가 나올까요?

output:

 

output

 

같은 결과가 나왔습니다. 그렇다면 둘은 같은 것일까요?

 

이번에는 list를 조금 수정해보겠습니다.

 

리스트수정

 

1을 하나 더추가해서 2개로 만들었습니다. 

 

 

그 후 Single메소드를 실행 시켜보겠습니다.

output:

 

Unhandled exception. System.InvalidOperationException: Sequence contains more than one matching element..

 

한개 이상의 요소를 포함하고 있어서 발생되는 에러라고 하는데요.

Single의 경우 조건에 맞는 대상이  2개 이상이 있으면 안됩니다.

 

그렇다면, First를 실행시켜볼까요?

 

first출력

 

 output:

 

 

정상적으로 1을 뽑아냅니다.

 

여기서 둘의 차이를 명확하게 알 수 있습니다.

 

Single, First 둘다 하나의 값을 추출하는데 사용되는 것은 맞으나, 추출할곳(여기선 list)에 조건에 맞는 값이 하나만 있다라는 확신이 있을때만 Single을 사용해야 합니다. 

 

 

2) SingleOrDefault vs FirstOrDefault

두기능은 조건에 맞는 값이 없을 경우 오류를 발생시키는 것이 아니라 null을 발생시키는 용도로 사용합니다.

 

굳이 null을 발생시키는 이유는 개발자들이 if value == null 조건문을 통해 여러가지 컨트롤이 가능하기 때문입니다.

 

여기서 주의할점은 Single에서 오류가 났던 것은 SingleOrDefault로 해도 여전히 오류가 납니다.

 

Single 오류 예제

 

output:

 

Unhandled exception. System.InvalidOperationException: Sequence contains more than one matching element..

 

SingleOrDefault는 오로지 null처리를 하기 위한 기능이 추가된것일뿐, 여전히 Single의 속성을 가지고 있기 때문입니다.

 

 

여기서 1을 의도적으로 없애보겠습니다.

그렇다면 조건에 맞는 값이 없겠죠?

 

디버깅을 통해 확인해보니 0이 들어온것을 알 수있습니다.

 

 

int의 경우에는 default값인 0을 반환했습니다.

 

반면 string의 경우 default값인 null을 반환합니다.

 

 

FirstOrDefault는 앞서 설명한 First의 속성을 가지고 있으면서, null을 처리하는 기능을 가지고 있습니다.

이미 앞에서 다 설명했기 때문에 자세한 설명은 생략합니다.

 

 

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글