O que é o uso de "??" [duplicado
Pergunta
Possível duplicata:
O que é "??" operador para?
Por favor, me explique o que é usar "??" no código abaixo e o que é "??" usado para.
if ((this.OrderDate ?? DateTime.MinValue) > DateTime.Today)
{E.Description = "A data do pedido não deve estar no futuro."; retorna falso; }
O código acima está em http://nettiers.com/entitylayer.ashx
Obrigado.
Solução
(Isso é uma duplicata, mas é difícil de procurar, por isso estou feliz o suficiente para fornecer mais outro alvo para pesquisas futuras ...)
É o operador de coalescação nula. Essencialmente, ele avalia o primeiro operando e, se o resultado for nulo (uma referência nula ou o valor nulo para um tipo de valor anulado), ele avalia o segundo operando. O resultado é o operando que foi avaliado por último, efetivamente.
Observe que, devido à sua associativa, você pode escrever:
int? x = E1 ?? E2 ?? E3 ?? E4;
E se E1
, E2
, E3
e E4
são todas expressões do tipo int?
- vai começar com E1
e progredir até encontrar um valor não nulo.
O primeiro operando deve ser um tipo anulável, mas o segundo operando pode ser não indicável; nesse caso, o tipo de expressão geral não é indicável. Por exemplo, suponha que o E4 seja uma expressão do tipo int
(mas todo o resto ainda é int?
Então você pode fazer x
Não nulo:
int x = E1 ?? E2 ?? E3 ?? E4;