이번 포스팅에서는 First와 Single을 비교하고 FirstOrDefault 와 SingleOrDefault의 비교를 통해 각각의 개념을 알아보도록 하겠습니다.
1) single() vs first()
1~9로 구성된 리스트에서 1에 해당하는 값을 추출하는 코드입니다.
각각 First와 Single을 이용했는데요.
어떤 결과가 나올까요?
output:
같은 결과가 나왔습니다. 그렇다면 둘은 같은 것일까요?
이번에는 list를 조금 수정해보겠습니다.
1을 하나 더추가해서 2개로 만들었습니다.
그 후 Single메소드를 실행 시켜보겠습니다.
output:
한개 이상의 요소를 포함하고 있어서 발생되는 에러라고 하는데요.
Single의 경우 조건에 맞는 대상이 2개 이상이 있으면 안됩니다.
그렇다면, First를 실행시켜볼까요?
output:
정상적으로 1을 뽑아냅니다.
여기서 둘의 차이를 명확하게 알 수 있습니다.
Single, First 둘다 하나의 값을 추출하는데 사용되는 것은 맞으나, 추출할곳(여기선 list)에 조건에 맞는 값이 하나만 있다라는 확신이 있을때만 Single을 사용해야 합니다.
2) SingleOrDefault vs FirstOrDefault
이 두기능은 조건에 맞는 값이 없을 경우 오류를 발생시키는 것이 아니라 null을 발생시키는 용도로 사용합니다.
굳이 null을 발생시키는 이유는 개발자들이 if value == null 조건문을 통해 여러가지 컨트롤이 가능하기 때문입니다.
여기서 주의할점은 Single에서 오류가 났던 것은 SingleOrDefault로 해도 여전히 오류가 납니다.
output:
SingleOrDefault는 오로지 null처리를 하기 위한 기능이 추가된것일뿐, 여전히 Single의 속성을 가지고 있기 때문입니다.
여기서 1을 의도적으로 없애보겠습니다.
그렇다면 조건에 맞는 값이 없겠죠?
디버깅을 통해 확인해보니 0이 들어온것을 알 수있습니다.
즉 int의 경우에는 default값인 0을 반환했습니다.
반면 string의 경우 default값인 null을 반환합니다.
FirstOrDefault는 앞서 설명한 First의 속성을 가지고 있으면서, null을 처리하는 기능을 가지고 있습니다.
이미 앞에서 다 설명했기 때문에 자세한 설명은 생략합니다.
'c#' 카테고리의 다른 글
[c#] Insert, Update, Delete 하는법 with EntityFramework (0) | 2022.07.21 |
---|---|
[c#] localdb에 EntityFramework 연결 하는 방법 (0) | 2022.07.19 |
[c#] SQL in / not in 기능을 LINQ로 구현 (0) | 2022.07.15 |
[c#] 양수일때 + 넣기 (using String.Format) (0) | 2022.07.14 |
[c#] string format ### 000 차이 (0) | 2022.07.13 |
댓글