Tipos anuláveis (Guia de Programação em C#)Nullable Types (C# Programming Guide)

Os tipos que permitem valor nulo são instâncias do struct System.Nullable<T>.Nullable types are instances of the System.Nullable<T> struct. Um tipo que permite valor nulo pode representar o intervalo de valores para seu tipo de valor subjacente, além de um valor null adicional.A nullable type can represent the correct range of values for its underlying value type, plus an additional null value. Por exemplo, Nullable<Int32>, também indicado como “Nullable de Int32”, pode receber qualquer valor de –2147483648 a 2147483647 ou receber um valor null.For example, a Nullable<Int32>, pronounced "Nullable of Int32," can be assigned any value from -2147483648 to 2147483647, or it can be assigned the null value. Um Nullable<bool> pode ser atribuído aos valores true, false ou nulo.A Nullable<bool> can be assigned the values true, false, or null. A capacidade de atribuir null para tipos numéricos e boolianos é especialmente útil quando você está lidando com bancos de dados e outros tipos de dados que contêm elementos que não podem ser atribuídos a um valor.The ability to assign null to numeric and Boolean types is especially useful when you are dealing with databases and other data types that contain elements that may not be assigned a value. Por exemplo, um campo booliano em um banco de dados pode armazenar os valores true ou false ou pode ser indefinido.For example, a Boolean field in a database can store the values true or false, or it may be undefined.

using System;

class NullableExample
{
  static void Main()
  {
      int? num = null;

      // Is the HasValue property true?
      if (num.HasValue)
      {
          Console.WriteLine("num = " + num.Value);
      }
      else
      {
          Console.WriteLine("num = Null");
      }

      // y is set to zero
      int y = num.GetValueOrDefault();

      // num.Value throws an InvalidOperationException if num.HasValue is false
      try
      {
          y = num.Value;
      }
      catch (InvalidOperationException e)
      {
         Console.WriteLine(e.Message);
      }
   }
}
// The example displays the following output:
//       num = Null
//       Nullable object must have a value.

Para obter mais informações, consulte Usando tipos que permitem valor nuloFor more examples, see Using Nullable Types

Visão geral dos tipos que permitem valor nuloNullable Types Overview

Os tipos que permitem valor nulo têm as seguintes características:Nullable types have the following characteristics:

  • Os tipos que permitem valor nulo representam variáveis de tipo de valor que podem ser atribuídas ao valor de null.Nullable types represent value-type variables that can be assigned the value of null. Você não pode criar um tipo que permite valor nulo com base em um tipo de referência.You cannot create a nullable type based on a reference type. (Os tipos de referência já dão suporte ao valor null.)(Reference types already support the null value.)

  • A sintaxe T? é a abreviação de Nullable<T>, em que T é um tipo de valor.The syntax T? is shorthand for Nullable<T>, where T is a value type. As duas formas são intercambiáveis.The two forms are interchangeable.

  • Atribuir um valor a um tipo que permite valor nulo exatamente como faria para um tipo de valor comum, por exemplo int? x = 10; ou double? d = 4.108.Assign a value to a nullable type just as you would for an ordinary value type, for example int? x = 10; or double? d = 4.108. Um tipo que permite valor nulo também pode ser atribuído ao valor null:int? x = null.A nullable type can also be assigned the value null: int? x = null.

  • Use o método Nullable<T>.GetValueOrDefault para retornar o valor atribuído ou o valor padrão do tipo subjacente se o valor for null, por exemplo int j = x.GetValueOrDefault();Use the Nullable<T>.GetValueOrDefault method to return either the assigned value, or the default value for the underlying type if the value is null, for example int j = x.GetValueOrDefault();

  • Use as propriedades somente leitura HasValue e Value para testar em relação ao valor nulo e recupere o valor, conforme mostrado no exemplo a seguir: if(x.HasValue) j = x.Value;Use the HasValue and Value read-only properties to test for null and retrieve the value, as shown in the following example: if(x.HasValue) j = x.Value;

    • A propriedade HasValue retornará true se a variável contiver um valor ou false se for null.The HasValue property returns true if the variable contains a value, or false if it is null.

    • A propriedade Value retorna um valor se atribuído.The Value property returns a value if one is assigned. Caso contrário, uma System.InvalidOperationException será gerada.Otherwise, a System.InvalidOperationException is thrown.

    • O valor padrão para HasValue é false.The default value for HasValue is false. A propriedade Value não tem valor padrão.The Value property has no default value.

    • Você também pode usar os operadores == e != com um tipo que permite valor nulo, conforme mostrado no exemplo a seguir: if (x != null) y = x;You can also use the == and != operators with a nullable type, as shown in the following example: if (x != null) y = x;

  • Use o operador ?? para atribuir um valor padrão que será aplicado quando um tipo que permite valor nulo cujo valor atual é null for atribuído a um tipo não anulável, por exemplo, int? x = null; int y = x ?? -1;Use the ?? operator to assign a default value that will be applied when a nullable type whose current value is null is assigned to a non-nullable type, for example int? x = null; int y = x ?? -1;

  • Os tipos que permitem valor nulo aninhados não são permitidos.Nested nullable types are not allowed. A linha a seguir não será compilada: Nullable<Nullable<int>> n;The following line will not compile: Nullable<Nullable<int>> n;

Para saber mais:For more information:

Especificação da Linguagem C#C# Language Specification

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte tambémSee Also

Nullable
Guia de Programação em C#C# Programming Guide
C#C#
Referência de C#C# Reference
O que exatamente "levantado" significa?What exactly does 'lifted' mean?