Compartilhar via


Como: identificar um tipo anulável (guia de programação do C#)

Você pode usar o C# typeof operador para criar um Type o objeto que representa um tipo anulável:

System.Type type = typeof(int?);

Você também pode usar as classes e métodos para o System.Reflection namespace para gerar Type objetos que representam os tipos anuláveis.No entanto, se você tenta obter informações sobre o tipo das variáveis anuláveis em tempo de execução usando o GetType método ou a is operador, o resultado é um Type tipo de objeto que representa o tipo subjacente, e não o Nullable propriamente dito.

Chamando GetType em um Nullable tipo faz com que uma operação de conversão boxing deve ser executada quando o tipo é implicitamente convertido para Object.Portanto, GetType sempre retorna um Type o objeto que representa o tipo subjacente, e não do tipo anulável.

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

C# é operador também opera no tipo subjacente de um Nullable.Portanto, você não pode usar is para determinar se uma variável é um tipo anulável.O exemplo a seguir mostra que o is operador trata um Nullable <int> variável como int.

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

Exemplo

Use o código a seguir para determinar se um Type objeto representa um tipo anulável.Lembre-se de que esse código sempre retorna falso se o Type objeto foi retornado de uma chamada para GetType, conforme explicado anteriormente neste tópico.

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

Consulte também

Referência

Tipos anuláveis (guia de programação do C#)

Boxing tipos anuláveis (C# Guia de programação)