다음을 통해 공유


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하는 경우 그 동작에 두 가지 이점이 있습니다.

  1. nullable 개체와 boxing된 상응하는 개체가 null인지 테스트할 수 있습니다.

      bool? b = null;
      object boxedB = b;
      if (b == null)
      {
        // True.
      }
      if (boxedB == null)
      {
        // Also true.
      }
    
  2. 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# 프로그래밍 가이드)

참조

nullable 형식(C# 프로그래밍 가이드)

개념

C# 프로그래밍 가이드