How to: Identificar um anulável Tipo (guia de programação 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 o namespace para gerar Type objetos que representam tipos anuláveis. No entanto, se você tentar obter informações sobre o tipo de 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 objeto que representa o tipo subjacente, não o anulável tipo.
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, não é possível usar is 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<>)) {…}