Existem vários operadores disponíveis, e um que gosto muito é o operador ??.

Resolvi mostra-lo porque dificilmente eu vejo alguém utilizando, será que só eu gosto? Bom, como sabemos temos no .NET os Nullable Types, ou sejá conseguimos definir por exemplo um int que pode receber null.

Abaixo as duas formas possíveis para definir que um tipo pode receber null.

int? mes = null;
Nullable<int> ano = null;

Para facilitar, e uma preferência, utilizo sempre int?, DateTime?, bool?, etc… bem melhor que Nullable<T>.

Um exemplo da utilização do operador para entendermos o funcionamento.

static void Main(string[] args)
{
    int? dia = 14;
    int? mes = 7;
    Nullable<int> ano = null;

    Console.WriteLine("Dia: {0} Mês: {1} Ano: {2}", dia ?? 0, mes ?? 0, ano ?? 0);
}

Análisando o código acima, escrevo na tela o dia, mês e ano informados, se algum for null mostro 0.

Então o funcionamento do operador ?? é:

Mostra o operando da esquerda do operador ?? se o mesmo não for nulo, se o operando da esquerda for nulo, mostra o da direita.

Simples e extremamente útil, espero que gostem e adotem mais um operador Winking smile.

Abraços.

  • http://djonatastenfen.spaces.live.com/ Djonatas Tenfen

    Muito Legal esse operador, conhecia ele para usar como “if” funciona mtu bemm. Acredito que a idéia surgiu a partir do COALESCE do T-SQL.

  • http://diogodamiani.com.br Diogo Damiani

    Olá Márcio,

    Eu particularmente gosto muito desse operador também.

    Impressiona é a quantidade de desenvolvedores que nem sabe que ele existe!

    Parabéns pelo post!

    Abraço!

    • Márcio Fábio Althmann

      Olá Diogo, mas a idéia do post foi justamente por que nunca vejo alguém utilizando.
      E eu também gosto muito do operador :D

      E Djonatas eu também acho que a idéia veio do COALESCE do SQL.

      Abraços

  • http://www.mbanagouro.net/blog Michel Banagouro

    Eu utilizo bastante em propriedades que fazem referência a coleções ou objetos que eu desejo simular uma espécie de “lazy loading”:

    private List pessoas;
    public List Pessoas
    {
    get { return pessoas = pessoas ?? new List); }
    set { pessoas = value; }
    }

    :D

    • Márcio Fábio Althmann

      É, é uma boa utilização Michel ;)

      Abraços

  • http://www.mbanagouro.net/blog Michel Banagouro

    Detalhe no exemplo do meu comentário:
    Eu coloquei ali um List generic de Pessoa, mas seu blog tirou achando que eram tags =/

    • Márcio Fábio Althmann

      Acontece, depois acho o código pra isso hehe

  • http://rafaelamorim.co.cc Rafael Amorim

    Muito bacana isso!

    confesso que realmente não conhecia.. Já tinha visto no intellisense tipo “int?”, mas não sabia do que se tratava!

    Valeu por compartilhar!

    []‘s
    @faelAmorim

  • Pingback: C# – Operador ?:

  • Oops Twitter isnt working at the moment