-
[C#] ??, ?. 연산자 ( Nullable) Null 널C#/기초 2021. 12. 16. 15:34
연산자 ?. 및 ?[]
피연산자가 null 이 아닌 것으로 평가되었을 때만 멤버 액세스 ?. 또는 요소 액세스 ?[] 연산을 피연산자에게 적용하며, 그렇지 않으면 null 을 반환한다.
- a가 null로 평가되면 a?.x 또는 a?[x]의 결과는 null이다.
- a가 null이 아닌 것으로 평가되면 a?.x 또는 a?[x]의 결과는 각각 a.x또는 a[x]의 결과와 같다.
Null 조건부 연산자는 단락 연산자이다. 즉 조건부 멤버나 요소 액세스 작업의 한 체인의 작업에서 null을 반환하면 나머지 체인은 실행되지 않는다. 다음 예제에서 A가 null로 평가되면 B가 평가되지 않고, A또는 B가 null로 평가되면 C가 평가되지 않는다.
A?.B?.Do(C);
? 기본 처리 방법
object tmp = {조건} ? {참(true)일 경우 return값} : {거짓(false)일 경우 return값}
?? , ??=
int? a = null; int b = a ?? -1; Console.WriteLine(b); // output: -1
a 는 null값을 가질 수 있다.
왼쪽 피연산자 ?? 오른쪽 피연산자
왼쪽 피연산자가 null이면 오른쪽 피연산자를 반환. ex) a가 null 이면 -1 반환.
왼쪽 피연산자가 null이 아니면 왼쪽 피연산자를 반환. ex) a가 null이 아니면 a 반환.
C# 8.0 이상에서 사용할 수 있는 null 병합 할당 연산자 ??=는 왼쪽 피연산자가 null로 계산되는 경우에만 오른쪽 피연산자의 값을 왼쪽 피연산자에 대입한다. 왼쪽 피연산자가 null이 아닌 것으로 평가되면 ??= 연산자는 오른쪽 피연산자를 평가하지 않는다.
List<int> numbers = null; int? a = null; (numbers ??= new List<int>()).Add(5); Console.WriteLine(string.Join(" ", numbers)); // output: 5 numbers.Add(a ??= 0); Console.WriteLine(string.Join(" ", numbers)); // output: 5 0 Console.WriteLine(a); // output: 0
??= 연산자의 왼쪽 피연산자는 변수, 속성 또는 인덱서 요소여야 합니다.
C# 7.3 이전 버전에서 ?? 연산자의 왼쪽 피연산자 형식은 참조 형식 또는 Nullable 값 형식이어야 합니다.
C# 8.0부터 이 요구 사항이 다음과 같이 바뀝니다. ?? 및 ??= 연산자의 왼쪽 피연산자 형식은 null을 허용하지 않는 값 형식일 수 없습니다. 특히 C# 8.0부터 비제한 형식 매개 변수와 함께 null 병합 연산자를 사용할 수 있습니다.C# ?? 및 ??=, ?. 연산자
C그래서 C피연산자가 null 이 아닌 것으로 평가되었을 때만 멤버 액세스 ?. 또는 요소 액세스 ?\[] 연산을 피연산자에게 적용하며, 그렇지 않으면 null 을 반환한다.a가 null로 평가되면 a?.x 또는 a?\[x]
velog.io
https://error999.tistory.com/22
C# - 물음표 연산자(?, ??), 삼항연산자
코드를 작성할 때 null 처리와 단순 if else 조건을 처리할 때 '단순한 조건때문에 줄을 더 써야하나?' 라고 생각할 수 있습니다. 아주 간단한 조건인데도 불구하고 한줄로 쓸 수 있는 코드에 4줄이
error999.tistory.com
728x90'C# > 기초' 카테고리의 다른 글
[C#]LINQ (0) 2022.02.21 [C#]문법 (0) 2022.02.18 WritePixels (0) 2021.12.24 [C#]WPF Serial Port (0) 2021.12.21 Delegate, Event, Action (0) 2021.12.14 댓글