728x90
개요
?. ?? 모양부터 ??하게 만드는 연산자.
무슨 연산자인지 살펴보자.
?. 연산자
?. 연산자는 [ Null이 아니라면 참조하고, Null이라면 Null로 처리 ]하라는 뜻이다.
class CClass
{
public List<int> lstNumber = new List<int>();;
};
static void Main( string[] args )
{
CClass newClass = new CClass();
Console.WriteLine( newClass?.lstNumber );
// List 정보가 출력됨.
CClass nullClass = null;
Console.WriteLine( nullClass?.lstNumber );
// 아무것도 출력되지 않음. (null)
}
아래의 CClass의 경우에는 멤버로 lstNumber가 있는데,
[ newClass?.lstNumber ]는 newClass가 null이 아니라면 lstNumber를 참조하고, null이라면 null을 뱉으라는 뜻이다.
이게 이것만보면 어떤 쓸모가 있는지 전혀 모르겠다.
하지만 다음에 나올 ?? 연산자와 함께라면 강력해진다.
?? 연산자
?? 연산자는 [ Null이라면 오른쪽 값으로 처리 ]하는 연산자 이다.
Object obj = new Dictionary<int, char>();
Object a = obj ?? new List<int>();
Console.WriteLine( a );
// Dictinary로 출력
Object obj2 = null;
Object b = obj2 ?? new List<int>();
Console.WriteLine( b );
// List로 출력
obj의 경우에는 null이 아니여서, Dictinary가 그대로 남았지만,
obj2의 경우에는 null이어서 List로 치환되어 b에 들어간 모습을 볼 수가 있다.
.? ?? 연산자
.? 연산자와 ?? 연산자가 합쳐지면 강력해진다.
static int GetListCount<T>( List<T> lstTemplate_ )
{
return lstTemplate_?.Count ?? 0;
}
static void Main( string[] args )
{
List<int> a = new List<int>();
a.Add( 5 );
a.Add( 4 );
Console.WriteLine( GetListCount( a ) );
// 2로 출력됨
List<int> b = null;
Console.WriteLine( GetListCount( b ) );
// 0으로 출력됨
}
리스트가 null이면 0, null이 아니면 Count를 뱉어주는 함수를 구현한 모습이다.
.? 연산자와 ?? 연산자를 잘 쓰면 지저분한 null 구문을 줄일 수 있어서 유익 할 것이다.
출처 : https://developstudy.tistory.com/69
'개발언어 > C#' 카테고리의 다른 글
[C#] LINQ 데이터 필터링 방법 - Where절 (0) | 2023.05.22 |
---|---|
[C#] 링크(LINQ)란? (0) | 2023.05.22 |
[C#] Nullable type, int? 널러블 타입 (0) | 2023.05.22 |
[C#] Nullable<T> 타입 (0) | 2023.05.22 |
[C#] Parse(string s)와 TryParse(string s, out int result) 함수 (0) | 2023.05.22 |