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

