다음을 통해 공유


방법: Nullable 형식 식별(C# 프로그래밍 가이드)

C# typeof 연산자를 사용하여 Nullable 형식을 나타내는 Type 개체를 만들 수 있습니다.

System.Type type = typeof(int?);

System.Reflection 네임스페이스의 클래스와 메서드를 사용하여 Nullable 형식을 나타내는 Type 개체를 생성할 수도 있습니다. 그러나 런타임에 GetType 메서드나 is 연산자를 사용하여 Nullable 변수에서 형식 정보를 가져오려고 하면 Nullable 형식이 아니라 내부 형식을 나타내는 Type 개체가 만들어집니다.

Nullable 형식의 GetType을 호출하면 형식이 Object로 암시적으로 변환될 때 boxing 연산이 수행됩니다. 따라서 GetType은 항상 Nullable 형식이 아니라 내부 형식을 나타내는 Type 개체를 반환합니다.

  int? i = 5;
  Type t = i.GetType();
  Console.WriteLine(t.FullName); //"System.Int32"

C# is 연산자도 Nullable의 내부 형식에서 작동합니다. 따라서 is를 사용하여 변수가 Nullable 형식인지 여부를 확인할 수 없습니다. 다음 예제에서는 is 연산자가 Nullable<int> 변수를 int로 처리하는 것을 보여 줍니다.

  static void Main(string[] args)
  {
    int? i = 5;
    if (i is int) // true
      //…
  }

예제

다음 코드를 사용하여 Type 개체가 Nullable 형식을 나타내는지 여부를 확인할 수 있습니다. 이 항목의 앞부분에서 설명한 것처럼 GetType을 호출할 때 Type 개체가 반환되었으면 이 코드는 항상 false를 반환합니다.

if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {…}

참고 항목

참조

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

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