Nullable 형식 boxing(C# 프로그래밍 가이드)
nullable 형식을 기반으로 한 개체는 이 개체가 null이 아닌 경우에만 boxing됩니다. HasValue가 false인 경우 boxing하는 대신 개체 참조가 null에 할당됩니다. 예를 들면 다음과 같습니다.
bool? b = null;
object o = b;
// Now o is null.
개체가 null이 아닌 경우, 즉 HasValue가 true인 경우 boxing이 수행되지만 이 경우에도 nullable 개체의 기반이 되는 내부 형식만 boxing됩니다. null이 아닌 nullable 값 형식을 boxing하면 값 형식을 래핑하는 Nullable이 아니라 값 형식 자체가 boxing됩니다. 예를 들면 다음과 같습니다.
bool? b = false;
int? i = 44;
object bBoxed = b; // bBoxed contains a boxed bool.
object iBoxed = i; // iBoxed contains a boxed int.
boxing된 두 개체는 nullable 이외의 형식을 boxing하여 만든 개체와 동일합니다. 이 개체는 nullable이 아닌 boxed 형식과 마찬가지로 nullable 형식으로 unboxing할 수 있습니다. 예를 들면 다음과 같습니다.
bool? b2 = (bool?)bBoxed;
int? i2 = (int?)iBoxed;
설명
nullable 형식을 boxing하는 경우 그 동작에 두 가지 이점이 있습니다.
nullable 개체와 boxing된 상응하는 개체가 null인지 테스트할 수 있습니다.
bool? b = null; object boxedB = b; if (b == null) { // True. } if (boxedB == null) { // Also true. }
boxing된 nullable 형식은 내부 형식의 기능을 완전히 지원합니다.
double? d = 44.4; object iBoxed = d; // Access IConvertible interface implemented by double. IConvertible ic = (IConvertible)iBoxed; int i = ic.ToInt32(null); string str = ic.ToString();
참고 항목
작업
방법: Nullable 형식 식별(C# 프로그래밍 가이드)