none
Qual a lógica da expressão "??" RRS feed

  • Pergunta

  • Desculpem se a pergunta tem resposta obvia ou não, 

    Mas encontrei o seguinte código em um exemplo de criação de Html helpers do asp mvc, o código que encontrei e que já pesquisei e não encontrei é a seguinte:

    var str = labelText
                    ?? (metadata.DisplayName
                    ?? (metadata.PropertyName
                    ?? htmlFieldName.Split(new[] { '.' }).Last()));

    não sei se não soube pesquisar, pois não vinha nada perto do que eu buscava ao por o seguinte no google "Expression '??' in C#" , retorna questões sobre lambda expression.

    acredito que esta expressão seja alguma variação dos ifs inline do C#, por exemplo:

    string str = text == "Texto" ? "É um texto" : "Não é um texto";

    mais se alguém puder me esclarecer melhor qual a logica da expressão ?? agradeço.

    Att. Fernando.


    Fernando

    terça-feira, 25 de junho de 2013 12:49

Respostas

  • Olá,

    É um operador que testa se o valor da esquerda é nulo, caso seja nulo ele atribui o valor da direita, senão atribui o da esquerda.

    Ex:

    string x = null;
    string valor = x ?? "Joao"; //valor será Joao
    
    string y = "Maria";
    string valor2 = y ?? "José"; //valor2 será Maria
    
    

    Sería a mesma coisa que fazer isso:

    if (y == null)
        valor = "José";
    else
        valor = y;
    

    • Sugerido como Resposta Roberson Naves terça-feira, 25 de junho de 2013 12:57
    • Marcado como Resposta NotNet terça-feira, 25 de junho de 2013 13:44
    terça-feira, 25 de junho de 2013 12:57

Todas as Respostas

  • Olá,

    É um operador que testa se o valor da esquerda é nulo, caso seja nulo ele atribui o valor da direita, senão atribui o da esquerda.

    Ex:

    string x = null;
    string valor = x ?? "Joao"; //valor será Joao
    
    string y = "Maria";
    string valor2 = y ?? "José"; //valor2 será Maria
    
    

    Sería a mesma coisa que fazer isso:

    if (y == null)
        valor = "José";
    else
        valor = y;
    

    • Sugerido como Resposta Roberson Naves terça-feira, 25 de junho de 2013 12:57
    • Marcado como Resposta NotNet terça-feira, 25 de junho de 2013 13:44
    terça-feira, 25 de junho de 2013 12:57
  • É eu estava longe de chegar a essa conclusão, vlw aew Israel, como eu iria adaptar o exemplo agr vi que nem vou necessitar disso, ia ficar uma verificação desnecessário, pq todos os primeiros valores sempre seriam nulos.

    Mais muito bom conhecer um novo(para mim pelo menos) recurso, muito legal.

     

    Fernando


    • Editado NotNet terça-feira, 25 de junho de 2013 13:50 Edit
    terça-feira, 25 de junho de 2013 13:49