Tipos que permitem valor nulo (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. Os tipos que permitem valor nulo podem representar todos os valores de um tipo subjacente T e um valor null adicional.Nullable types can represent all the values of an underlying type T, and an additional null value. O tipo subjacente T pode ser qualquer tipo de valor que não permite valor nulo.The underlying type T can be any non-nullable value type. T não pode ser um tipo de referência.T cannot be a reference type.

Por exemplo, é possível atribuir null ou qualquer valor inteiro de Int32.MinValue até Int32.MaxValue a um Nullable<int> e true, false ou null a um Nullable<bool>.For example, you can assign null or any integer value from Int32.MinValue to Int32.MaxValue to a Nullable<int> and true, false, or null to a Nullable<bool>.

Use um tipo que permite valor nulo quando precisar representar o valor indefinido de um tipo subjacente.You use a nullable type when you need to represent the undefined value of an underlying type. Uma variável booliana pode ter apenas dois valores: true e false.A Boolean variable can have only two values: true and false. Não há nenhum valor "indefinido".There is no "undefined" value. Em muitos aplicativos de programação, principalmente nas interações de banco de dados, um valor de variável pode estar indefinido ou ausente.In many programming applications, most notably database interactions, a variable value can be undefined or missing. Por exemplo, um campo em um banco de dados pode conter os valores true ou false ou pode não conter nenhum valor.For example, a field in a database may contain the values true or false, or it may contain no value at all. Use um tipo Nullable<bool> nesse caso.You use a Nullable<bool> type in that case.

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 null.Nullable types represent value-type variables that can be assigned the null value. 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? é uma abreviação para Nullable<T>.The syntax T? is shorthand for Nullable<T>. As duas formas são intercambiáveis.The two forms are interchangeable.

  • Atribua um valor a um tipo que permite valor nulo como você faria para um tipo de valor subjacente: int? x = 10; ou double? d = 4.108;.Assign a value to a nullable type just as you would for an underlying value type: int? x = 10; or double? d = 4.108;. Também é possível atribuir o valor null: int? x = null;.You also can assign the null value: int? x = null;.

  • Use as propriedades somente leitura Nullable<T>.HasValue e Nullable<T>.Value para testar em relação ao valor nulo e recuperar o valor, conforme mostrado no exemplo a seguir: if (x.HasValue) y = x.Value;Use the Nullable<T>.HasValue and Nullable<T>.Value readonly properties to test for null and retrieve the value, as shown in the following example: if (x.HasValue) y = x.Value;

  • Também é possível usar os operadores == e != com um tipo que permite valor nulo, conforme mostrado no exemplo a seguir: if (x != null) y = x.Value;.You can also use the == and != operators with a nullable type, as shown in the following example: if (x != null) y = x.Value;. Se a e b forem ambos nulos, a == b será avaliado como true.If a and b are both null, a == b evaluates to true.

  • Começando com C# 7.0, é possível usar a correspondência de padrões para examinar e obter um valor de um tipo que permite valor nulo: if (x is int xValue) y = xValue;.Beginning with C# 7.0, you can use pattern matching to both examine and get a value of a nullable type: if (x is int xValue) y = xValue;.

  • O valor padrão de T? é uma instância cuja propriedade HasValue retorna false.The default value of T? is an instance whose HasValue property returns false.

  • Use o método GetValueOrDefault() para retornar o valor atribuído ou o valor padrão do tipo de valor subjacente se o valor do tipo que permite valor nulo for null.Use the GetValueOrDefault() method to return either the assigned value, or the default value of the underlying value type if the value of the nullable type is null.

  • Use o método GetValueOrDefault(T) para retornar o valor atribuído ou o valor padrão fornecido se o valor do tipo que permite valor nulo for null.Use the GetValueOrDefault(T) method to return either the assigned value, or the provided default value if the value of the nullable type is null.

  • Use o operador de coalescência nula, ??, para atribuir um valor a um tipo subjacente baseado em um valor do tipo que permite valor nulo: int? x = null; int y = x ?? -1;.Use the null-coalescing operator, ??, to assign a value to an underlying type based on a value of the nullable type: int? x = null; int y = x ?? -1;. No exemplo, como x é null, o valor de resultado y é -1.In the example, since x is null, the result value of y is -1.

  • Se uma conversão definida pelo usuário for definida entre dois tipos de dados, a mesma conversão também poderá ser usada com as versões que permitem valor nulo desses tipos de dados.If a user-defined conversion is defined between two data types, the same conversion can also be used with the nullable versions of these data types.

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

Para obter mais informações, consulte os tópicos Usando tipos que permitem valor nulo e Como identificar um tipo que permite valor nulo.For more information, see the Using nullable types and How to: Identify a nullable type topics.

Consulte tambémSee also

System.Nullable<T>
System.Nullable
Operador ???? Operator
Guia de Programação em C#C# Programming Guide
Guia do C#C# Guide
Referência de C#C# Reference
Tipos de valor que permitem valor nulo (Visual Basic)Nullable Value Types (Visual Basic)