Pergunta

Esta questão já tem uma resposta aqui:

Eu estava pensando sobre sinais ?? no código C#. Para que serve? E como eu posso usá-lo?

E sobre int?? É um int anulável?

Veja também:

?? Null Coalescing Operator -?> O que coalescentes média

Foi útil?

Solução

É o chamado "nulo operador coalescente" e funciona assim:

Em vez de fazer:

int? number = null;
int result = number == null ? 0 : number;

Agora você pode apenas fazer:

int result = number ?? 0;

Outras dicas

É a operador nulo coalescentes . Foi introduzido em C # 2.

O resultado da a ?? b expressão é a se isso não é nulo, ou b contrário. b não é avaliada a menos que seja necessário.

Duas coisas agradáveis:

  • O tipo geral da expressão é o do segundo operando, o que é importante quando você estiver usando tipos de valor anulável:

    int? maybe = ...;
    int definitely = maybe ?? 10;
    

    (Note que você não pode usar um tipo de valor não nulo como primeiro operando - seria inútil.)

  • As regras de associatividade significa que você pode encadear isso realmente facilmente. Por exemplo:

    string address = shippingAddress ?? billingAddress ?? contactAddress;
    

Isso vai usar o primeiro valor não nulo para fora do transporte, cobrança ou endereço para contato.

Isso é o operador coalesce. Essencialmente é uma abreviação para o seguinte

x ?? new Student();
x != null ? x : new Student();

MSDN Documentação sobre o operador

É o novo operador nulo Coalesce.

O ?? operador retorna da mão esquerda operando se não for nulo, ou então ele retorna o operando à direita.

Você pode ler sobre ele aqui: http://msdn.microsoft.com/en-us/ biblioteca / ms173224 (VS.80) .aspx

É um atalho para:

Text = (category == null ? "Home" : category);

é o operador coalesce. ele irá retornar outro valor se o primeiro valor é nulo

string value1 = null;
string value2 = "other";

string value3 = value1 ?? value2; // assigns "other" to value 3

verifica se categoria é null -. Quando este for o caso, o valor nulo é substituído por "Home"

Um dos meus usos favoritos para o nulo coalescentes operador é para evitar se declarações no meu código (eu acho que se declarações são feias e apenas coisas fiquem amontoados na maioria das vezes). Por exemplo, ter um cenário típico onde se pode optar por carregar algo de cache, se disponível, caso contrário carregar a partir do db e preencher o cache.

private SomeData GetData() {
    var data = HttpRuntime.Cache.Get("key") as SomeData;

    if (data == null) {
        data = DAL.GetData(some parameters...);
        HttpRuntime.Cache.Add("key", data, ....);
    }

    return data;
}

Para mim, isso é código feio. Eu posso ser um pouco anal, mas porque não refatorar-lo a esta vez?

private SomeData GetDataAndCache() {
    var data = DAL.GetData(some parameters...);
    HttpRuntime.Cache.Add("key", data, ....);
    return data;
}

private SomeData GetData() {
    var data = HttpRuntime.Cache.Get("key") as SomeData;
    return data ?? GetDataAndCache();
}

Segue-se mais de perto SRP e é mais limpo e mais fácil de ler, IMO. As funções executar exatamente uma função claramente identificável cada um.

Se categoria é nulo, texto vai se tornar "Home"

Retorna o valor primeiro não-nulo. Handy.

?? Null-Coalescing Operador

int? é um int nulo, o que significa que pode ter os valores de um int normal e nulo. Leia este para mais detalhes.

Essa é a nulo coalescentes operador . É usado com anulável tipos (entre outras coisas , desculpe:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top