정리가 필요한 카테고리(추후 정리)/C#,Unity

C#] 널 관련 연산자

TwinParadox 2017. 1. 7. 19:14
728x90

널 접합 연산자(널 병합 연산자) : ??

null-coalescing operator


좌측 피연산자가 null이 아니면, 그 피연산자에 의해 평가되고,

좌측 피연산자가 null이면 우측 피연산자로 평가됨

좌변이 null이 아닌 경우에는 우변은 절대 평가하지 않음.

이 연산자는 nullable 형식과도 함께 사용 가능.


연산자는 다음 예처럼 변수에 default를 배정하는 데 사용할 수 있음.


1
2
string s1 =  null;
string s2 = s1 ?? "우변" ; // s2는 "우변"으로 평가
cs




널 조건 연산자 : ?.

null-conditional operator


C# 6.0에 새로 추가된 연산자로, 'Elvis 연산자'로도 불림.

해당 연산자를 이용하면 표준적인 마침표 연산자를 이용해 메서드를 호출하거나, 멤버에 접근할 때,

피연산자가 null인지에 대한 점검을 따로 시행할 필요가 없음.

피연산자가 null이라고 해도, NullReferenceException이 발생하지 않음.


1
2
3
System.Text.StringBuilder sb = null;
string s = sb?.ToString(); // 오류 아님, s에 null 배정
string s = (sb == null ? null : sb.ToString()); // 위의 문장과 동일
cs



좌변의 피연산자가 null인 경우 표현식 나머지 부분이 전혀 평가되지 않음.

아래 예시에서도, ToString(), ToUpper() 사이에 표준 마침표 연산자가 있으나, s는 오류 없이 null이 됨.


1
2
System.Text.StringBuilder sb = null;
string s = sb?.ToString().ToUpper(); // 오류 없이 s에 null 배정
cs


이 연산자는 연산자 바로 왼쪽의 피연산자가 null이 될 가능성이 있는 경우에 사용하면 됨.

최종적인 표현식은 반드시 널이 허용되는 표현식이어야 함.


1
2
3
System.Text.StringBuilder sb = null;
int length = sb?.ToString().Length; // 불가
int? length = sb?.ToString().Length; // 가능
cs



널 조건 연산자를 이용하면 void 메서드를 호출할 수 있음.


someObject?.VoidMethod();


위 표현식에서 someObject가 null인 경우, 무연산이며, NullReferenceException은 발생하지 않음. 

728x90