?. , ??, ??= 연산자
C# 6 이상에서 사용할 수 있는 null 조건부 연산자는 피연산자가 null이 아닌 것으로 평가되었을 때만 멤버 액세스
?. 또는 요소 액세스, ?[]연산을 피연산자에게 적용해서 null을 반환을 한다.
예시를 보면 다음과 같다.
A?.B.C();
A가 null이 아니면 B는 평가되지 않고 C()는 호출되지 않는다.
double SumNumbers(List<double[]> setsOfNumbers, int indexOfSetToSum)
{
return setsOfNumbers?[indexOfSetToSum]?.Sum() ?? double.NaN;
}
var sum1 = SumNumbers(null, 0);
Console.WriteLine(sum1); // output: NaN
var numberSets = new List<double[]>
{
new[] { 1.0, 2.0, 3.0 },
null
};
var sum2 = SumNumbers(numberSets, 0);
Console.WriteLine(sum2); // output: 6
var sum3 = SumNumbers(numberSets, 1);
Console.WriteLine(sum3); // output: NaN
??= 는 왼쪽 피연산자가 null으로 계산되는 경우에만 오른쪽의 피연산자의 값을 왼쪽에 대입한다.
반응형
예시를 보면 다음과 같다.
numbers값이 null이기 때문에 5의 값을 대입한다.
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#의 버전에 따라 사용할 수 있는 연산자가 제약이 있습니다.
반응형
C#의 버전이 올라가면서 연산자의 표현이 좀 더 간결해진 것이 특징이다.
Old Code와 비교하게 되면 다음과 같다.
<Old Code>
if (variable is null)
{
variable = expression;
}
<C# 8.0>
variable ??= expression;
개인적으로는 이렇게 사용을 하는 것도 괜찮지만 꼭 필수는 아니다.
다만 알고는 있어야 해당 코드에 대한 의미를 파악할 수 있다.
Microsoft 멤버 액세스 연산자 및 식 : [링크]
Microsoft ?? 및 ??=연산자 : [링크]
★☆☆☆☆
반응형
'개발 > 기본) 기본기' 카테고리의 다른 글
기본기) 랜덤 - 의사 난수 발생기 (Pseudo Random Number Generator : PRNG) (0) | 2021.10.27 |
---|---|
기본기)Unity) Fake Null (0) | 2021.10.19 |
기본기)Event Handler 대리자 (0) | 2021.09.26 |
기본기)c# switch statement on a range(switch 문 범위 조건) (0) | 2021.09.13 |
기본기) Switch 문 안에 Switch 문법 (Nested switch-case) (4) | 2021.08.26 |
댓글