Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O operador ?? de coalescagem nula retorna o valor de seu operando à esquerda se não nullfor . Caso contrário, ele avalia o operando do lado direito e retorna seu resultado. O operador ?? não avaliará o operando do lado direito se o operando esquerdo for avaliado como não nulo. O operador de atribuição de avaliação de nulo ??= atribuirá o valor do operando do lado direito para o operando esquerdo somente se o operando esquerdo for avaliado como null. O operador ??= não avaliará o operando do lado direito se o operando esquerdo for avaliado como não nulo.
List<int>? numbers = null;
int? a = null;
Console.WriteLine((numbers is null)); // expected: true
// if numbers is null, initialize it. Then, add 5 to numbers
(numbers ??= new List<int>()).Add(5);
Console.WriteLine(string.Join(" ", numbers)); // output: 5
Console.WriteLine((numbers is null)); // expected: false
Console.WriteLine((a is null)); // expected: true
Console.WriteLine((a ?? 3)); // expected: 3 since a is still null
// if a is null then assign 0 to a and add a to the list
numbers.Add(a ??= 0);
Console.WriteLine((a is null)); // expected: false
Console.WriteLine(string.Join(" ", numbers)); // output: 5 0
Console.WriteLine(a); // output: 0
O operando à esquerda do ??= operador deve ser uma variável, uma propriedade ou um elemento indexador .
A linguagem C# faz referência a documentos da versão mais recentemente lançada da linguagem C#. Ele também contém a documentação inicial para funcionalidades em pré-visualizações públicas para o próximo lançamento do idioma.
A documentação identifica qualquer recurso introduzido pela primeira vez nas três últimas versões do idioma ou nas versões prévias públicas atuais.
Dica
Para descobrir quando um recurso foi introduzido pela primeira vez em C#, consulte o artigo sobre o histórico de versão da linguagem C#.
O tipo do operando à esquerda dos operadores ?? e ??= não pode ser um tipo de valor não anulável. Em particular, você pode usar os operadores de avaliação de nulo com parâmetros de tipo não treinados:
private static void Display<T>(T a, T backup)
{
Console.WriteLine(a ?? backup);
}
Os operadores de avaliação de nulo são associativos à direita. Ou seja, expressões do formulário
a ?? b ?? c
d ??= e ??= f
são avaliadas como
a ?? (b ?? c)
d ??= (e ??= f)
Exemplos
Os ?? operadores e os ??= operadores são úteis nos seguintes cenários:
Em expressões que usam os operadores
?.condicionais nulos e?[], use o??operador para fornecer uma expressão alternativa para avaliar se o resultado da expressão com operações condicionais nulas énull:double SumNumbers(List<double[]> setsOfNumbers, int indexOfSetToSum) { return setsOfNumbers?[indexOfSetToSum]?.Sum() ?? double.NaN; } var sum = SumNumbers(null, 0); Console.WriteLine(sum); // output: NaNQuando você trabalha com tipos de valor anuláveis e precisa fornecer um valor de um tipo de valor subjacente, use o
??operador para especificar o valor a ser fornecido se um valor de tipo anulável fornull:int? a = null; int b = a ?? -1; Console.WriteLine(b); // output: -1Use o Nullable<T>.GetValueOrDefault() método se o valor a ser usado quando um valor de tipo anulável for
nulldeve ser o valor padrão do tipo de valor subjacente.Para tornar o código de verificação de argumentos mais conciso, use uma
throwexpressão como o operando à direita do??operador:public string Name { get => name; set => name = value ?? throw new ArgumentNullException(nameof(value), "Name cannot be null"); }O exemplo anterior também demonstra como usar membros com corpo de expressão para definir uma propriedade.
Use o
??=operador para substituir o código do seguinte formulário:if (variable is null) { variable = expression; }Use o seguinte código:
variable ??= expression;
Sobrecarga do operador
Você não pode sobrecarregar os operadores e ??= os ?? operadores.
Especificação da linguagem C#
Para obter mais informações sobre o operador ??, consulte a seção O operador de avaliação de nulo da Especificação da linguagem c#.
Para obter mais informações sobre o ??= operador, consulte a seção Atribuição composta da especificação da linguagem C#.