Usando Nullable Types (guia de programação translation from VPE for Csharp)

Tipos anuláveis podem representam todos os valores de um tipo subjacente e um adicional nulovalor de .Tipos anuláveis são declarados em uma das seguintes maneiras:

System.Nullable<T> variable

- ou -

T? variable

T é o tipo subjacente de tipo que permite valor nulo. T pode ser qualquer tipo de valor incluindo struct; Ele não pode ser um tipo de referência.

Para obter um exemplo de como você usaria um tipo que permite valor nulo, considere como uma variável booliano comum pode ter dois valores: True e false.Não há nenhum valor significa "indefinidos".Banco de em muitos aplicativos de programação, principalmente dados interações, as variáveis podem ocorrer em um estado indefinido.Por exemplo, um campo em um banco de dados pode conter os valores true ou falsos, mas não pode também conter nenhum valor.Da mesma forma, os tipos de referência podem ser conjunto para null para indicar que eles não são inicializados.

Esta disparidade pode criar o trabalho extra de programação, com variáveis adicionais usadas para armazenar informações de estado, o uso de valores especiais e assim por diante.O modificador do tipo que permite valor nulo permite translation from VPE for Csharp criar variáveis de value-type indicar um valor indefinido.

Exemplos de tipos Nullable

Qualquer tipo de valor pode ser usado sistema autônomo base para um tipo que permite valor nulo.Por exemplo:

int? i = 10;
double? d1 = 3.14;
bool? flag = null;
char? letter = 'a';
int?[] arr = new int?[10];

Os membros de tipos Nullable

Cada instância de um tipo que permite valor nulo tem duas propriedades públicas de somente leitura:

  • HasValue

    HasValue é do tipo bool. É conjunto para true Quando a variável contém um valor não nulo.

  • Value

    Value é do mesmo tipo que o tipo subjacente. If HasValue é true, Value contém um valor significativo. If HasValue é false, acessando Value lançará um InvalidOperationException.

Neste exemplo, a HasValue membro é usado para testar se a variável contém um valor antes de tentar exibi-la.

int? x = 10;
if (x.HasValue)
{
    System.Console.WriteLine(x.Value);
}
else
{
    System.Console.WriteLine("Undefined");
}

Teste de um valor também pode ser concluído sistema autônomo no exemplo a seguir:

int? y = 10;
if (y != null)
{
    System.Console.WriteLine(y.Value);
}
else
{
    System.Console.WriteLine("Undefined");
}

Conversões explícitas

Um tipo que permite valor nulo pode ser convertido em um tipo regular, seja explicitamente com uma projeção ou usando o Value propriedade. Por exemplo:

int? n = null;

//int m1 = n;      // Will not compile.
int m2 = (int)n;   // Compiles, but will create an exception if x is null.
int m3 = n.Value;  // Compiles, but will create an exception if x is null.

Se uma conversão definida pelo usuário é definida entre tipos de dados de dois, a mesma conversão também pode ser usada com as versões anuláveis desses tipos de dados.

Conversões implícitas

Uma variável do tipo que permite valor nulo pode ser definida sistema autônomo null com o null palavra-chave, sistema autônomo mostrado no exemplo a seguir:

int? n1 = null;

A conversão de um tipo comum para um tipo que permite valor nulo, é implícito.

int? n2;
n2 = 10;  // Implicit conversion.

Operadores

Unário predefinido e operadores binário e os operadores definidos pelo usuário existentes para tipos de valor também podem ser usados por tipos anuláveis.Esses operadores produzem um valor nulo se os operandos forem nulos; caso contrário, o operador usa o valor contido para calcular o resultado.Por exemplo:

int? a = 10;
int? b = null;

a++;         // Increment by 1, now a is 11.
a = a * 10;  // Multiply by 10, now a is 110.
a = a + b;   // Add b, now a is null.

Ao realizar comparações com tipos anuláveis, se um dos tipos anuláveis for null, a comparação é avaliada sempre ser false. Portanto, é importante não assume que pois uma comparação é false, o oposto caso é true. Por exemplo:

int? num1 = 10;
int? num2 = null;
if (num1 >= num2)
{
    System.Console.WriteLine("num1 is greater than or equal to num1");
}
else
{
    // num1 is NOT less than num2
}

Após a conclusão no else demonstrativo inválido é válida porque num2 é null e, portanto, inválido contém um valor.

Uma comparação de dois tipos anuláveis que são os dois null será avaliado para true.

O??Operador

The ?? operador define um valor padrão que é retornado quando um tipo que permite valor nulo é atribuído a um tipo não anulável.

int? c = null;

// d = c, unless c is null, in which case d = -1.
int d = c ?? -1;

Também é possível usar esse operador com vários tipos anuláveis.Por exemplo:

int? e = null;
int? f = null;

// g = e or f, unless e and f are both null, in which case g = -1.
int g = e ?? f ?? -1;

Bool?  type

The bool? tipo que permite valor nulo pode conter três valores diferentes: True, False and nulo.Para obter informações sobre como converter de um bool?para um bool, consulte Como: Converter com segurança do bool? para bool (translation from VPE for Csharp Programming guia).

Valores booliano anuláveis é como o tipo de variável booliano é usado no SQL.Para garantir que os resultados produzidos pelo & e| operadores são consistentes com o tipo booliano três valores no SQL, os seguintes operadores predefinidos são fornecidos:

bool? operator &(bool? x, bool? y)

bool? operator |(bool? x, bool? y)

Os resultados desses operadores estão listados na tabela a seguir:

X

y

x e y

x|y

True

True

True

True

True

False

False

True

True

Nulo

Nulo

True

False

True

False

True

False

False

False

False

False

Nulo

False

Nulo

Nulo

True

Nulo

True

Nulo

False

False

Nulo

Nulo

Nulo

Nulo

Nulo

Consulte também

Conceitos

Guia de Programação C#

Referência

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

Conversão boxing Nullable Types (guia de programação translation from VPE for Csharp)