[C# 6.0] 널 조건 연산자 (Null-conditional operator)
728x90
반응형
널 조건 연산자 (Null-conditional operator)
C# 6.0 이상에서는 연산자 하나로 깔끔하게 해결할 수 있다. (= 널조건 연산자)
? 널 조건 연산자는
? 앞에 있는 객체가 Null인지 체크해서 Null이면 그냥 Null을 리턴하고, 그렇지 않으면 ? 다음의 속성이나 메서드를 실행한다.
하나하나 if문으로 null체크를 할 필요가 없이 축약해서 사용할 수 있어지는 것이다.
문법적인 측면에서 ? 다음에 일반적으로 속성이나 메서드가 오기 때문에 ?. 와 같이 표현되지만, 만약 인덱서 혹은 배열 요소 등을 접근할 경우는 ?[] 와 같이 표현될 수도 있다.
- 예시
// rows가 NULL이면 cnt 도 NULL
// rows가 NULL이 아니면 cnt는 실제 rows 갯수
int? cnt = rows?.Count;
// customers 컬렉션이 NULL이면 c는 NULL
// 아니면, c는 첫번째 배열요소
Customer c = customers?[0];
// customers가 널인지 체크하고
// 다시 customers[0]가 널인지 체크
int? age = customers?[0]?.Age;
?? 연산자
널 조건 연산자만을 사용하게 되면, 리턴 변수는 항상 null을 가질 수 있는 Nullable type이어야 한다.
?. 연산자 앞의 값이 null 인 경우, null을 리턴해야 하기 때문이다.
만약 리턴 변수가 null을 가질 수 없거나, null이 아니라 특정 값이 필요하다면 ??연산자를 함께 사용하게 된다.
?? 연산자는
null인 경우 ?? 뒤의 디폴트 값을 리턴하는 것인데, 이렇게 되면 리턴 변수형이 꼭 Nullable Type이 아니어도 되고 특정 값으로 지정도 가능하다.
- 예시
// rows가 NULL이면 cnt = 0
// 아니면 cnt는 실제 rows 갯수
int cnt = rows?.Count ?? 0;
연산자 | 설명 | 사용 예시 |
?. | null 체크 후 속성이나 메서드에 접근 | int? cnt = row?.Count; |
?[] | null 체크 후 인덱서 혹은 배열요소 접근 | Customer c = costomer?[0]; |
?? | null 체크 후 null이 아닐 시 왼쪽, null인 경우 오른쪽 값 리턴 | int cnt = rows?.Count ?? 0; |
참고 사이트
https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/null-coalescing-operator
http://www.csharpstudy.com/CS6/CSharp-null-conditional-operator.aspx
728x90
반응형
'Programming > C#' 카테고리의 다른 글
[C# 6.0] 문자열 보간(String interpolation) (0) | 2021.07.04 |
---|---|
[C#] .NET Framework에 대응하는 C# 버전 (0) | 2021.06.02 |
[C# 8.0] 널 병합 할당자 (0) | 2020.08.27 |
[C#] String.Format 표준 숫자 서식 문자열 (0) | 2020.06.20 |
댓글
이 글 공유하기
다른 글
-
[C# 6.0] 문자열 보간(String interpolation)
[C# 6.0] 문자열 보간(String interpolation)
2021.07.04 -
[C#] .NET Framework에 대응하는 C# 버전
[C#] .NET Framework에 대응하는 C# 버전
2021.06.02 -
[C# 8.0] 널 병합 할당자
[C# 8.0] 널 병합 할당자
2020.08.27 -
[C#] String.Format 표준 숫자 서식 문자열
[C#] String.Format 표준 숫자 서식 문자열
2020.06.20