// Rodolfo Fadino

/* LIFE RUNS ON CODE */

O operador ?: pode ser ilustrado da seguinte maneira

condicao ? primeira_expressao : segunda_expressao;

A condição é avaliada como Verdadeira ou Falsa, no caso da condição ser Verdadeira a primeira_expressao é avaliada e será retornada, no caso da condição ser Falsa a segunda_expressao é avaliada e será retornada como resultado.

A documentação é clara quando as necessidade das duas expressões retornarem o mesmo tipo. Mesmo que para isso seja necessário uma conversão explicita.

Algumas vezes em situações precisamos utilizar este operador com tipos que podem ser nulos. Como o exemplo abaixo:

Pessoa pessoa = new Pessoa();
int? codigo = (pessoa==null) ? null : pessoa.Id;

Nesse exemplo temos um objeto pessoa, que pode ser nulo ou não, se ele for nulo, temos que atribuir null a variável codigo, se não atribuiremos o Id (int) do objeto pessoa.

Este exemplo apresenta o seguinte erro durante a compilação

Type of conditional expression cannot be determined because there 
is no implicit conversion between '<null>' and 'int'

Uma das maneiras de corrigir este código é convertendo o null para int?, o que pode ser feito da seguinte maneira:

Pessoa pessoa = new Pessoa();
int? codigo = (pessoa == null) ? (int?)null : pessoa.Id;

Ou convertendo o Id da pessoa para int?, o que importa é que eles retornem explicitamente um tipo nullable:

Pessoa pessoa = new Pessoa();
int? codigo = (pessoa == null) ? null : (int?)pessoa.Id;

espero que esta dica rápida seja útil.

abs

Rodolfo

C#