Pergunta

O meu colega de trabalho é novo para C # e não sabia sobre o operador coalesce. Então, eu o vi escrever uma linha de código como este:

string foo = "" + str;

A idéia é que, se str é nulo, essa expressão seria retornar uma string vazia. Claro, que poderia ser reescrito como esta:

string foo = str ?? "";

E eu sinto que seria mais legível. Mas é realmente esse negócio um grande? São os benefícios de legibilidade suficiente para sugerir indo para trás e fazer essas linhas parecido com o segundo? Ou isso é uma daquelas coisas que eu deveria aprender a deixar ir (desde que o meu colega de trabalho é educado sobre a melhor maneira de fazer isso no futuro)?

Editar : Apenas uma nota, eu aprecio os comentários de eficiência, mas isso não está realmente sendo usado em todas as situações em que que o desempenho seria crítico. Assim, enquanto que a informação é interessante, não é necessariamente o que eu sinto é importante.

Foi útil?

Solução

IMO, é muito melhor para definir claramente essa lógica ou seja, não use concatenação de cadeia nula evitar e usar instrução condicional ou ?? operador.

Quanto a outros comentários:

há também um benefício de desempenho para utilizando o operador de coalescência-nulo, uma vez que nenhum concatenação terá necessariamente lugar (E, portanto, nenhuma corda extra exemplo está a ser criado desnecessariamente)

Não é verdade. C compila # compilador "" + cadeia2 para o mesmo código de 100% como seqüência1 ?? "". Além disso compilador C # traduz + operador a chamada ao método String.Concat que por sua vez cheques argumentos com função string.IsNullOrEmpty e não aloca uma nova seqüência neste caso.

Também eu recomendo o uso de String.Empty over "", pois é uma constante e não requer a criação de uma nova seqüência

.NET suportes estruturais corda internar tão "" e ponto string.Empty para a mesma memória região

Outras dicas

Eu não acho que um é mais legível do que o outro pessoalmente. Eu prefiro este:

string foo = str ?? "";

simplesmente porque eu realmente gosto do ?? operador.

Se você é um novato marca, eu acho que isso seria um pouco mais fácil de entender:

string foo = str == null ? "" : str;

ou

string foo = "";
if (str != null) foo = str;

No entanto, você meio que precisa perguntar o youself, "Como simples que você realmente deseja obter?"

Enquanto eu prefiro a segunda linha a partir do ponto de vista técnico, a primeira linha é realmente mais legível para mim ...

O segundo aspecto de linha mais legíveis para mim, deixa clara a intenção da expressão do lado direito.

Eu preferiria o segundo exemplo para o primeiro, pois é mais pró-ativa contra str sendo nula e é mais expressivo. Também eu recomendo o uso de String.Empty sobre "", pois é uma constante e não requer a criação de um novo String (e sim este é um nitpick extremo, mas importante nota).

Eu usaria o operador coalesce ou foo = str == null ? "" : str; por dois motivos:

  1. O primeiro exemplo não tem o mesmo comportamento em outros idiomas encaracolado-cinta (particularmente Java e JavaScript), onde anexando uma referência nula para um vazio string resultará em uma string contendo o null texto. Como resultado, o primeiro exemplo requer muito mais mental esforço para garantir que ele irá resultar no comportamento correto no ser linguagem de autoria. Mesmo tendo em conta outras pistas é C # (tais como o tipo de letra minúscula string), qualquer coisa que requer o desenvolvedor para abrandar e pensar "o que é a intenção deste código" resulta em perda de produtividade. Ele também poderia introduzir erros quando se deslocam de língua para língua.

  2. O segundo exemplo expressa mais claramente o intenção do código, que, tal como descrito na pergunta original é:

    when str is null set foo to an empty string

    Ao contrário do primeiro exemplo, o qual pode ser lido como:

    set foo to an empty string with str appended (which may have the side effect of setting foo to an empty string when str is null)

Como programadores, nós provavelmente deve estar tentando expressar a intenção do nosso código, ao invés de depender de efeitos colaterais de outras operações para nos dar os resultados que queremos.

aqui é um artigo sobre String.Empty vs ""

http://blogs.msdn.com/brada /archive/2003/04/22/49997.aspx

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