본문 바로가기
C#/C# 공부

C# : null 조건부 연산자

by TODAYCODE 2021. 7. 10.
반응형

널 조건부 연산자 = ?.

 

?. 가 하는 일은 객체의 맴버에 접근하기 전에 해당 객체가 null인지 검사하여 그 결과가 참(null일때)이면 그 결과로 null을 반환하고, 거짓을 경우에는 . 뒤에 지정된 맴버를 반환한다.

 

?. 연산자를 사용한 코드와 사용하지 않은 코드를 비교해서 확인해보자.

 

 

1. ?. 연산자를 사용하지 않고 == 연산자를 사용한 코드

class Foo
{
	public int member;
}

Foo foo = null;

int? bar;
if(foo == null)
	bar = null;
else
	bar = foo.member;

 

 

2. ?. 연산자를 사용한 코드

class Foo
{
	public int member;
}

Foo foo = null;

int? bar;
bar = foo?.member;

// foo 객체가 null이 아니면 member 필드에 접근하게 해준다.

 

?[ ]도 동일한 기능을 수행하는 연산자이다.

?[ ]는 ?. 와 비슷한 역할을 하지만, 객체의 맴버 접근이 아닌 배열과 같은 컬렉션 객체의 첨자를 이용한 참조에 사용된다.

 

using System.Collections;
using static System.Console;

namespace NullConditionalOperator
{
	class MainApp
    {
    	static void Main(string[] args)
        {
        	ArrayList a = null;
            a?.Add("야구"); // a?. 가 null을 반환하므로 Add() 메소드는 호출되지 않음
            a?.Add("축구");
            WriteLine($"Count : {a?.Count}");
            WriteLine($"{a?[0]}");
            WriteLine($"{a?[1]}");
            // 위에 3줄은 a?.가 null을 반환하므로 "Count:"외에 아무것도 출력되지 않음.
            
            a = new ArrayList(); // a는 더이상 null이 아님.
            a?.Add("야구");
            a?.Add("축구");
            WriteLine($"Count : {a?.Count}");
            WriteLine($"{a?[0]}");
            WriteLine($"{a?[1]}");
        }
    }
}

// 실행결과
// Count :
//
//
//
// Count : 2
// 야구
// 축구
반응형

'C# > C# 공부' 카테고리의 다른 글

C# : 프로퍼티 - Get / Set 문법  (0) 2021.07.27
C# : 비트연산자1 - 시프트 연산자  (0) 2021.07.11
C# : Nullable 형식  (0) 2021.07.10
C#: 열거 형식 (enum)  (0) 2021.07.10
C# : 상수( const )  (0) 2021.07.09

댓글