Publish:

태그:

카테고리:


struct 타입 변수에 값이 들어가있는지 확인해야 했다.

먼저 struct는 값 타입이라 null이 될 수 없다.
디폴트 값이든 ‘값’이 들어가 있다.
그래서 일반적인 null check로는 알 수 없다.

default 값이 들어가 있는지 struct 요소들 값들을 일일히 비교해줘도 되지만…

1
2
3
//구조체 변수 myStruct에 대한 값 비교  

if (myStruct.X == 0 || myStruct.Y == 0)

이보다 좀 더 간단하게 끝낼 수 있는 방법이 없나 찾아봤다.

1. Equals(default(T))

1
if (myStruct.Equals(default(MyStruct)))

말그대로 구조체 변수의 값들이 struct의 디폴트 값과 같은지 비교하는 것이다.

하지만 구조체의 디폴트 값이 0일 때 position 값을 담고 있는 구조체라면,
position 에선 0 또한 유효한 값이 될 수 있기 때문에 명확한 비교 방식이 될 수 없다.

2. Nullable 타입 사용

1
2
int? temp = null;
MyStruct? myStruct = null;

Nullable 타입은 값 타입도 Null Check를 할 수 있도록 (null을 할당할 수 있도록) 필드를 지원해주는 구조체이다.

구조체이므로 즉 Nullable 은 값 타입이다.

1
2
int? temp1 = null;
Nullable<int> temp2 = null;

’?’ 물음표 키워드로 Nullable 타입을 축약해서 쓸 수 있다.
위의 코드처럼 int 뒤에 물음표를 붙이면, 해당 변수는 Nullable int형 타입임을 의미한다. 그래서 null을 할당할 수 있게 된다.

Nullable은 null check를 할 수 있게 해주는 HasValue 필드와, 실제 값을 담고있는 Value 필드를 제공한다.

1
2
3
4
5
int? temp3 = null;
if (temp3.HasValue)
{
  Debug.Log(temp3.Value);
}

참고 링크


이슈 및 공부한 것을 기록해두는 개인 블로그 입니다. 댓글, 피드백 환영합니다 🙂

Update:

댓글남기기